У меня есть проблема кросс-языка относительно md5 :). У меня есть этот код в Java:md5 base64 encoder в C++ vs Java
BASE64Encoder encoder = new BASE64Encoder();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(someString.getBytes());
byte[] bMac = md.digest();
String anotherString = encoder.encodeBuffer(bMac);
Это кодирует и хэш строки в md5 и base64. Строка типа «aaa & 1» становится Fv4eRn4R0/mB + uc4j1GGaA ==
Теперь проблема заключается в следующем: как это сделать на C++? Я использую OpenSSL/md5.h, но, как и любой другой интернет-кодер md5 (после небольшого поиска Google), он получает хэш, как: 16fe1e467e11d3f981fae7388f518668
который находится в шестнадцатеричном это кажется. Если я попытаюсь преобразовать хеш md5 в base64, я получаю совершенно другой хеш (длиннее и уродливее :)).
Помощь !!!
Спасибо!
L.E .: Я использую MD5-метод от openssl/md5.h, как указывал AZI.
Пожалуйста, покажите нам соответствующие части кода C++, которые вы используете. – yms
Я предполагаю, что если функция дает шестнадцатеричную строку, вам придется преобразовать ее в последовательность байтов '{0x16,0xfe, 0x1e, ..., 0x68}', а затем base-64 закодировать это , Однако я недостаточно хорошо разбираюсь в библиотеке, чтобы дать правильный ответ. –
'someString.getBytes()' использует стандартную кодировку OS/language; если бы C++ тоже этого не делал, было бы лучше явно указать кодировку: 'someString.getBytes (« UTF-8 »)' или '" Windows-1252 "'. _К сожалению, маловероятно, что ваш код должен работать на нескольких компьютерах. Для C++ выполните поиск «Base64Encode». –