Почему дайджест сообщения SHA-256 дает другой результат в j2objc?

Я получаю другой результат при запуске моего кода на Java и j2obc. Мой java-код выглядит так:

import java.security.DigestException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class TestScrypt {

    public static void main(String[] args) throws NoSuchAlgorithmException, DigestException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(new byte[64]);
        byte[] tmp = md.digest();
        md.digest(tmp, 0, tmp.length);
        System.out.println("Result:" + Base64.getEncoder().encodeToString(tmp));
    }
}

Когда я запускаю это на своем 64-битном Mac с Java 1.8.0_152, я получаю этот вывод: Result:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

Но когда я компилирую с использованием j2objc (и связываю с использованием флагов -ObjC -ljre_emul), я получаю этот вывод: Result:9aX9QtFqIDAnmO9u0wmXm0MAPSMg2fDo6pgxqSdZ+0s=

Я делаю что-то неправильно?


person Mark    schedule 08.01.2018    source источник


Ответы (1)


Вы обнаружили ошибку в поддержке j2objc для md.digest(tmp, 0, tmp.length): он возвращает обновленный хэш как md.digest(tmp), но вместо этого должен возвращать необновленный дайджест. Я зарегистрировал ошибку №929, на которую вы можете подписаться, чтобы получать уведомления, когда она будет исправлена.

person tball    schedule 08.01.2018
comment
Спасибо! Кстати, ваш быстрый ответ на этот и другие вопросы j2objc о переполнении стека вселяет в меня уверенность, что я могу использовать j2objc в производстве. - person Mark; 09.01.2018
comment
Если вам нужно еще более быстрое устранение ошибок, мы с радостью принимаем исправления! ;-) - person tball; 09.01.2018