首页 > 解决方案 > 为 C# 和 Java 散列 SHA-256

问题描述

我需要在 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()));
}

标签: c#asp.netencryptionshamessage-digest

解决方案


让我评论一下您问题的 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 库太多了,我猜你正在使用一个可以正常工作的库)


推荐阅读