【发布时间】:2011-11-12 06:08:15
【问题描述】:
我对字符串的 SHA1 哈希值有一些问题。我正在尝试将文件从用 VB.net 编写的客户端发送到用 PHP 编写的服务器。我的问题是当我将相同的字符串传递给VB.net和PHP时,VB.net计算的SHA1值与PHP计算的值完全不同。
比如我想用Base64编码一个字符串,然后计算Base64字符串的SHA1 Hash。当计算机从 vb.net 版本和 PHP 版本执行此任务时,我得到两个不同的 SHA1 值,即使显然 Base64 编码的字符串是相同的:
VB.net: 2E97A53B09C482A831540B532845BCAC79BFACCF PHP: 350A2080264E2724D4BCBC521C35264D264A1DAF
我肯定错过了一些东西,你能指出我正确的方向并告诉我我在这里做错了什么吗?
非常感谢
这是 VB.net 代码:
Dim cInput As String
Dim cBase64 As String
Dim objSHA1 As New SHA1CryptoServiceProvider()
Dim abBytesToHash() As Byte
Dim cHash As String
cInput = "the quick brown fox jumps over the lazy dog"
cBase64 = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(cInput))
abBytesToHash = System.Text.Encoding.ASCII.GetBytes(cBase64)
abBytesToHash = objSHA1.ComputeHash(abBytesToHash)
cHash = BitConverter.ToString(objSHA1.ComputeHash(abBytesToHash))
cHash = Replace(cHash, "-", "")
MsgBox("BASE64: " + cBase64 + vbNewLine + "SHA1: " + cHash)
' Result is:
' BASE64: dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw==
' SHA1: 2E97A53B09C482A831540B532845BCAC79BFACCF
这是 PHP 代码:
$cInput = "the quick brown fox jumps over the lazy dog";
$cBase64 = base64_encode($cInput);
echo("BASE64: " . $cBase64 . "<br />" . "SHA1: " . strtoupper(sha1($cBase64)));
// Result is:
// BASE64: dGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZw==
// SHA1: 350A2080264E2724D4BCBC521C35264D264A1DAF
【问题讨论】:
-
这些字符串的编码是什么?
-
有趣的是tools4noobs.com/online_php_functions/sha1 给出了 16312751ef9307c3fd1afbcb993cdc80464ba0f1
-
@Captain:不,它没有,它给了
350a2080264e2724d4bcbc521c35264d264a1daf。文本没有被散列,它的 base64 编码是(为什么,我不知道)。 -
@Captain Giraffe - 您粘贴的内容有误,因为您提供的链接提供了
350A2080264E2724D4BCBC521C35264D264A1DAF。