【发布时间】:2019-06-10 22:08:07
【问题描述】:
我们用 powershell 编写了脚本来从用户终端获取一些信息。并创建了该信息的 SHA1,只是为了验证结果的完整性。
在我们从多个终端获取这些信息的服务器端,我们正在验证每个结果,并且脚本的这一端是用 Ruby 编写的。
现在的问题是,这两个脚本都给出了不同的 SHA1 哈希值,我不确定我在哪里犯了错误。
Powershell 代码如下。
$String = "
Directory: D:\OneDrive -
ControlCase\jt-work\evidance-collection\evidances-text\PCI_Evidences_CCIN-CAS-VKAUS\evidences
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2019-01-16 1:14 PM 7073 21_to_calc_hash.ps1
-a--- 2019-01-16 1:15 PM 9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt
-a--- 2019-01-15 9:37 PM 67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt
-a--- 2019-01-15 9:37 PM 5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt
-a--- 2019-01-15 9:38 PM 10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt
-a--- 2019-01-15 9:38 PM 13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt
-a--- 2019-01-15 9:38 PM 7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt
-a--- 2019-01-15 9:39 PM 4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt
-a--- 2019-01-15 9:39 PM 2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt
"
Function Get-Hash([String] $String)
{
$StringBuilder = New-Object System.Text.StringBuilder
[System.Security.Cryptography.HashAlgorithm]::Create("sha1").ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String))|%{
[Void]$StringBuilder.Append($_.ToString("x2"))
}
$StringBuilder.ToString()
}
Get-Hash($String)
这是我们为上述脚本得到的哈希e7c527068445c52635287b9ecf55566c2564d595
下面是 Ruby 脚本
require 'digest'
varj = "
Directory: D:\OneDrive -
ControlCase\jt-work\evidance-collection\evidances-text\PCI_Evidences_CCIN-CAS-VKAUS\evidences
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2019-01-16 1:14 PM 7073 21_to_calc_hash.ps1
-a--- 2019-01-16 1:15 PM 9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt
-a--- 2019-01-15 9:37 PM 67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt
-a--- 2019-01-15 9:37 PM 5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt
-a--- 2019-01-15 9:38 PM 10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt
-a--- 2019-01-15 9:38 PM 13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt
-a--- 2019-01-15 9:38 PM 7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt
-a--- 2019-01-15 9:39 PM 4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt
-a--- 2019-01-15 9:39 PM 2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt
"
varj_Encoded = varj.encode(Encoding::ISO_8859_1)
puts Digest::SHA1.hexdigest(varj_Encoded)
这是我们从这个脚本中得到的 SHA1。 77f7cecb2b75c16b1e929a56b644fad7d7f95965
现在的条件是,我不能对 Powershell 部分进行/提出任何更改。我需要调整 ruby 代码以使其匹配。
【问题讨论】:
-
我不是编码专家,所以这可能是不正确的,这个问题可能是在 Ruby 示例中您使用 ISO_8859_1 对字符串进行编码,而在 PowerShell 示例中您使用 UTF8 对字符串进行编码。这可能会导致观察到的差异,但我没有足够的信心来确定!请看这个链接stackoverflow.com/questions/7048745/…
-
也可以是换行符。 Windows 有
\r\n,Linux 有\n。我相信这不受编码的影响。 -
两个脚本都在windows平台上运行。
标签: ruby powershell