C#中的Java MessageDigest类

时间:2013-03-18 06:13:58

标签: c# encryption

我需要用Java完成某段加密逻辑才能在C#中转换 java代码片段如下。

更新(),摘要和重置功能的C#等价物是什么?

3 个答案:

答案 0 :(得分:9)

在C#中,该课程为HashAlgorithm

等效更新为TransformBlock(...)TransformFinalBlock(...),在调用最终块版本后(您也可以使用空输入),您可以调用Hash属性来提供你的摘要值。

调用最终块后,

HashAlgorithm可能是可重用的(这意味着下次调用TransformBlock时会重置),您可以仔细检查HashAlogrithm是否支持重用完全通过检查属性CanReuseTransform

相当于你的reset()/ digest()组合是一行byte[] ComputerHash(byte[])

答案 1 :(得分:1)

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();
}

答案 2 :(得分: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):How to create SHA-256 hashes in WinRT?