我需要用 Java 完成的某些加密逻辑转换为 C#
MessageDigest更新、摘要和重置功能的 C# 等效项是什么?
在 C# 中,类是HashAlgorithm。
update 的等价物是TransformBlock(...)
or TransformFinalBlock(...)
,在调用最终块版本之后(您也可以使用空输入),您可以调用Hash
将为您提供摘要值的属性。
HashAlgorithm
在调用 final 块后可能可以重用(这意味着它会在您下次调用时重置TransformBlock
),您可以通过检查属性来仔细检查您是否HashAlgorithm
支持重用CanReuseTransform
。
与您的 reset()/digest() 组合等效的是一行byte[] ComputeHash(byte[])
。
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(password.getBytes());
BigInteger hash = new BigInteger(1, md.digest());
hashword = hash.toString(16);
} catch (NoSuchAlgorithmException ex) {
/* error handling */
}
return hashword;
public static string HashPassword(string input)
{
var sha1 = SHA1Managed.Create();
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] outputBytes = sha1.ComputeHash(inputBytes);
return BitConverter.ToString(outputBytes).Replace("-", "").ToLower();
}
对于 C# 中的摘要,类似于 Java,您可以使用类 Windows.Security.Cryptography.Core。例如,以下方法返回一个 SHA256 哈希,格式为 base64:
public static string sha256Hash(string data)
{
// create buffer and specify encoding format (here utf8)
IBuffer input = CryptographicBuffer.ConvertStringToBinary(data,
BinaryStringEncoding.Utf8);
// select algorithm
var hasher = HashAlgorithmProvider.OpenAlgorithm("SHA256");
IBuffer hashed = hasher.HashData(input);
// return hash in base64 format
return CryptographicBuffer.EncodeToBase64String(hashed);
}
请参阅(mbrit):如何在 WinRT 中创建 SHA-256 哈希?