C#SHA-256与Java SHA-256.结果不同?
发布时间:2020-12-16 10:19:55 所属栏目:百科 来源:网络整理
导读:我想将一些 Java中的代码转换为C#. Java代码: private static final byte[] SALT = "NJui8*N823bVvy03^4N".getBytes(); public static final String getSHA256Hash(String secret) { try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); d
|
我想将一些
Java中的代码转换为C#.
Java代码: private static final byte[] SALT = "NJui8*&N823bVvy03^4N".getBytes();
public static final String getSHA256Hash(String secret)
{
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(secret.getBytes());
byte[] hash = digest.digest(SALT);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
hexString.append(Integer.toHexString(0xFF & hash[i]));
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
throw new RuntimeException("SHA-256 realization algorithm not found in JDK!");
}
当我尝试使用the SimpleHash class时,我得到了不同的哈希值 更新: 例如: Java:byte [] hash = digest.digest(SALT); [0] = 9 [1] = -95 [2] = -68 [3] = 64 [4] = -11 [5] = 53 .... C#代码(类SimpleHash): [0] 175 byte [1] 209 byte [2] 120 byte [3] 74 byte [4] 74 byte [5] 227 byte 解决方法
String.getBytes method使用平台的默认字符集将字符串编码为字节,而您链接的示例代码使用UTF-8.
试试这个: digest.update(secret.getBytes("UTF-8"));
其次,Integer.toHexString method返回十六进制结果,没有前导0. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
