我有一个在服务器端运行的 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# 传输的。
I know C# 和 Javascript 之间的 SHA-256 哈希值不同 https://stackoverflow.com/questions/10559203/sha-256-hashes-different-between-c-sharp-and-javascriptthat因为 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)