我需要用Java完成某段加密逻辑才能在C#中转换 java代码片段如下。
更新(),摘要和重置功能的C#等价物是什么?
答案 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);
}