Хеширование SHA-256 для C # и Java - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно было создать хэш в 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()));
}

1 Ответ

0 голосов
/ 04 апреля 2019

Позвольте мне прокомментировать 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, и я предполагаю, что вы используете одну, которая работает нормально)

...