我試着翻譯TOTP到VB.Net一個JavaScript應用程序之間的不同的輸出:http://blog.tinisles.com/2011/10/google-authenticator-one-time-password-algorithm-in-javascript/HMACSHA1給JS和VB.Net
我見HMAC-部分的翻譯過程中遇到的一個問題:
//Javascript:
var hmacObj = new jsSHA("Hello World!", 'HEX');
var hmac = hmacObj.getHMAC("secret", 'HEX', 'SHA-1', "HEX");
這是我翻譯的在VB.Net一codesnippet
'VB.Net:
Dim hmacObjTest As New HMACSHA1(System.Text.Encoding.UTF8.GetBytes("secret"))
Dim hmacTest As Byte() = hmacObjTest.ComputeHash(System.Text.Encoding.UTF8.GetBytes("Hello World!"))
Dim hmacHexTest As New StringBuilder()
For i As Integer = 0 To hmacTest.Length - 1
hmacHexTest.Append(hmacTest(i).ToString("x2"))
Next i
Dim strTest As String = "HMAC = " & hmacHexTest.ToString()
的問題是,我從兩種語言不同的輸出:
Output JS: 5efed98b0787c83f9cb0135ba283c390ca49320e //Tested from jsSha demo: http://caligatio.github.io/jsSHA/
Output VB.Net: 87b0154b8420c0b58869ca103f481e824d8876ea
輸出是不是都一樣像他們這樣一個問題:hmacsha1 output hex strings different between vb.net and python
有誰知道我可能是做錯了什麼?
謝謝你的回答。 JavaScript代碼具有我正在尋找的輸出,所以我不需要更改該代碼。你知道JavaScript的getHMAC中使用的編碼標準嗎?任何方式改爲在VB.Net正確的標準呢? – Encrypto94
使用的編碼由'System.Text.Encoding.UTF8.GetBytes()'定義,在這種情況下顯然是UTF-8。你可以在這裏使用你選擇的編碼。 –