Matlab-Java MD5 дает неверные хэши

Я пытаюсь получить хеш md5 массива char. Ниже мой код.

data = unicode2native(data, 'UTF-8');
K = java.security.MessageDigest.getInstance('MD5');
md5 = reshape(dec2hex(typecast(K.digest(data), 'UINT8')), 1, 32);

Википедия приводит несколько примеров хеш-значений для строк. Например, ввод «Быстрая коричневая лиса перепрыгивает через ленивую собаку» должен дать хэш md5 9e107d9d372bb6826bd81d3542a419d6, однако моя реализация дает следующий 917932b86d134a1de0dd7b62b8d52496, который, очевидно, не совпадение.

Я не совсем уверен, где может быть проблема, но, возможно, это связано с преобразованием символов в первой строке.


person warpstack    schedule 04.02.2016    source источник


Ответы (2)


Нет, это перестройка, которая выключена:

s = unicode2native('The quick brown fox jumps over the lazy dog','UTF-8');
K = java.security.MessageDigest.getInstance('MD5');
out = dec2hex(typecast(K.digest(s),'uint8'))

9E
10
7D
9D
37
2B
B6
82
6B
D8
1D
35
42
A4
19
D6

Правильная переделка:

reshape(out',1,[])
person Oleg    schedule 04.02.2016
comment
Я такой болван и забыл транспонировать! Спасибо. - person warpstack; 05.02.2016

Проблема в том, что вы используете reshape, удалите его, и вы уже сможете распознать хеш.

data='The quick brown fox jumps over the lazy dog'
data2 = unicode2native(data, 'ASC-II');
K = java.security.MessageDigest.getInstance('MD5');
md5 = dec2hex(typecast(K.digest(data2), 'UINT8')).';
md5 = md5(:).'
person Daniel    schedule 04.02.2016