我有使用SHA256生成哈希码的简单代码,但是,它为同一输入提供了不同的结果。但是,如果我在引号中声明相同的字符串值,例如_input= "test"
,则返回相同的结果。
public static System.String generateKey(System.String _input)
{
System.Byte[] convertedArr;
SHA256Managed sh = new System.Security.Cryptography.SHA256Managed();
convertedArr = sh.ComputeHash(System.Text.Encoding::UTF8.GetBytes(_inputString),0, System.Text.Encoding::UTF8.GetByteCount(_input));
hashCode = System.Convert::ToBase64String(convertedArr);
return hashCode;
}
答案 0 :(得分:1)
注意:
convertedArr = sh.ComputeHash(System.Text.Encoding::UTF8.GetBytes(_inputString),0, System.Text.Encoding::UTF8.GetByteCount(_input));
哈希的输入是_inputString
,但长度取自_input
,它们不相同。 _inputString
!= _input
。
功能定义:
public static System.String generateKey(System.String _input)
当前代码:
convertedArr = sh.ComputeHash(System.Text.Encoding::UTF8.GetBytes(_inputString),0, System.Text.Encoding::UTF8.GetByteCount(_input));
Debuggable(semio-pseudo)代码:
inputBytes = System.Text.Encoding::UTF8.GetBytes(_input)
inputLength = System.Text.Encoding::UTF8.GetByteCount(_input)
hashBytes = convertedArr = sh.ComputeHash(inputBytes, 0, inputLength);
通过这种方式,可以轻松验证输入和长度。错误的可能性较小,因为_input
仅使用一次。
注意:在实践中,我会从inputBytes
得到长度,但我不熟悉X ++,所以我没有做出改变。