我需要在Java中生成哈希,然后在C#中检查它。如何在转换回字符串时从这两种算法中获得相同的输出?
- - - - - - C# - - - - - -
?
------------ ------------的Java
public static String encrypt(String value) throws NoSuchAlgorithmException {
private static final String ALGORITHM = "SHA-256";
private static final String[] UPDATES = "goKpRF61ApDDJN9m0OOwHtU9G56psEqJjPUdiH3kZto=";
MessageDigest md = MessageDigest.getInstance(ALGORITHM);
for (int i = 0; i < UPDATES.length; i++) {
md.update(UPDATES[i].getBytes());
}
return Base64.getEncoder().encodeToString(md.digest(value.getBytes()));
}
让我评论你的问题的Java部分(我不知道C#)。
private static final String[] UPDATES = "goKpRF61ApDDJN9m0OOwHtU9G56psEqJjPUdiH3kZto=";
这看起来不对。如果您只有一个字符串,则声明应为:
private static final String UPDATES = "goKpRF61ApDDJN9m0OOwHtU9G56psEqJjPUdiH3kZto=";
其余的代码:
MessageDigest md = MessageDigest.getInstance(ALGORITHM);
md.update(UPDATES.getBytes());
return Base64.getEncoder().encodeToString(md.digest());
如果您有多个要消化的字符串:
MessageDigest md = MessageDigest.getInstance(ALGORITHM) ;
String str[] = {"A", "B", "C", "D"} ;
for (String s : str)
md.update(s.getBytes()) ;
return Base64.getEncoder().encodeToString(md.digest());
(我忽略了Base64位,因为有太多Base64库,我猜你正在使用一个工作正常的)