10

我需要用 Java 完成的某些加密逻辑转换为 C#

MessageDigest更新摘要重置功能的 C# 等效项是什么?

4

3 回答 3

11

在 C# 中,类是HashAlgorithm

update 的等价物是TransformBlock(...)or TransformFinalBlock(...),在调用最终块版本之后(您也可以使用空输入),您可以调用Hash将为您提供摘要值的属性。

HashAlgorithm在调用 final 块后可能可以重用(这意味着它会在您下次调用时重置TransformBlock),您可以通过检查属性来仔细检查您是否HashAlgorithm支持重用CanReuseTransform

与您的 reset()/digest() 组合等效的是一行byte[] ComputeHash(byte[])

于 2013-03-18T13:21:58.563 回答
3
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();
}
于 2016-05-13T07:19:30.787 回答
0

对于 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 哈希?

于 2017-01-25T09:26:41.837 回答