Конвертировать C ++ MD5 кодировать в Android / Java

Я хочу преобразовать следующий метод в Java. Я не хочу реализовывать это сам. Но я не получаю ожидаемую закодированную строку. Вот код:

QString CHMacMD5::MD5_encode(QString password) {
unsigned char result[16];
memset( result, 0, sizeof(result) );
QString md5key = "some_key";
CHMacMD5 md5;
md5.HMac_MD5(password.toUtf8().constData(),password.length(),md5key.toUtf8().constData(),md5key.length(),result);
QString md5out;
for( int i = 0; i < 16; ++i ) {
md5out += QString("%1").arg(result[i], 2, 16, QChar('0'));
}
return md5out;
}

Я предполагаю, что что-то происходит между преобразованием строки Java в UTF-8, беззнаковым байтом и т. Д.

Вот мой код Java:

 private void md5Encode(String password) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return;
}

md.update(javaStringToNullTerminatedString(password));

byte[] digest = md.digest();

StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}

System.out.println("original:" + password);
System.out.println("digested(hex):" + sb.toString());
}

private byte[] javaStringToNullTerminatedString(String string) {
CharsetEncoder enc = Charset.forName("ISO-8859-1").newEncoder();

int len = string.length();
byte b[] = new byte[len + 1];
ByteBuffer bbuf = ByteBuffer.wrap(b);
enc.encode(CharBuffer.wrap(string), bbuf, true);

b[len] = 0;

return b;
}

1

Решение

Оригинальный код вычисляет не простую контрольную сумму MD5, а код проверки подлинности сообщения с использованием секретного ключа в переменной md5key и входного пароля.

Ваш код вычисляет только хэш md5 пароля и не использует ключ вообще.

Комбинация секретного ключа и введенного текста для ввода MD5 (или других хеш-функций) для получения hmac определяется RFC 2104:
https://www.ietf.org/rfc/rfc2104.txt

Здесь (2-й ответ), кажется, как это сделать в Java:
Как создать HMAC MD5 в Android?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]