我有關於md5 :)的跨語言問題。 我有這樣的代碼在Java中:在C++ vs Java中的md5 base64編碼器
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編碼器(小谷歌搜索後),它就會像一個哈希: 16fe1e467e11d3f981fae7388f518668
這是十六進制看來。如果我嘗試在base64中轉換md5哈希,我會得到完全不同的哈希(更長和更醜陋:))。
幫助!!!
謝謝!如AZI指出的,我使用openssl/md5.h中的MD5方法。
請向我們展示您正在使用的C++代碼的相關部分。 – yms
我猜測,如果函數給你一個十六進制字符串,你必須將它轉換爲一個字節序列{0x16,0xfe,0x1e,...,0x68},然後base-64將它編碼。不過,我對圖書館不夠熟悉,無法給出正確的答案。 –
'someString.getBytes()'使用默認的OS /語言編碼;如果C++沒有這樣做,最好明確地給一個編碼:'someString.getBytes(「UTF-8」)或'「Windows-1252」'。 _遺憾的是,您的代碼不可能需要在多臺計算機上運行._對於C++,請搜索「Base64Encode」。 –