为C#和Java散列SHA-256

问题描述 投票:-2回答:1

我需要在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.net encryption sha message-digest
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.