簡體   English   中英

C#和Javascript SHA256散列的代碼示例

[英]Code example for C# and Javascript SHA256 hashing

我在服務器端運行的C#中有一個算法,它會散列一個base64編碼的字符串。

byte[] salt = Convert.FromBase64String(serverSalt); // Step 1
SHA256Managed sha256 = new SHA256Managed(); // Step 2
byte[] hash = sha256.ComputeHash(salt); // Step 3
Echo("String b64: " + Convert.ToBase64String(hash)); // Step 4

然后根據哈希的數據庫列表檢查哈希。 我喜歡用javascript實現相同的功能,使用serverSalt,因為它是通過websocket從C#傳輸的。

我知道在C#和Javascript之間有不同的SHA-256哈希,因為C#和Javascript有不同的字符串編碼。 但我知道我可以在字節數組中填充零以使Javascript表現為C#(上面的步驟1已經解決)。

var newSalt  = getByteArrayFromCSharpString(salt); // Pad zeros where needed
function getByteArrayFromCSharpString(inString)
{
  var bytes = [];
  for (var i = 0; i < inString.length; ++i)
{
    bytes.push(inString.charCodeAt(i));
    bytes.push(0);
}
return bytes;
}

任何人都可以提供一些有關我可以用來重現步驟2,3和4的算法的見解嗎?

PS:已經有問題和答案,但沒有一個代碼片段。

這是解決方案,我真的希望這可以幫助處於相同情況的其他人。

在html文件中,加載crypto-js庫

<!-- library for doing password hashing, base64 eoncoding / decoding -->
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/core-min.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/sha256.js"></script>

在javascript中,執行以下操作

// This function takes a base64 string, hashes it with the SHA256 algorithm
// and returns a base64 string. 
function hashBase64StringAndReturnBase64String(str)
{
    // Take the base64 string and parse it into a javascript variable
    var words  = CryptoJS.enc.Base64.parse(str);
    // Create the hash using the CryptoJS implementation of the SHA256 algorithm
    var hash = CryptoJS.SHA256(words);
    var outString =  hash.toString(CryptoJS.enc.Base64)
    // Display what you just got and return it
    console.log("Output string is: " + outString);
    return outString;
}

檢查以下URL上的Java腳本SHA256實現http://www.movable-type.co.uk/scripts/sha256.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM