1

md5に関して言語間の問題があります:)。私は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エンコーダーと同様に(小さなグーグル検索の後)、16fe1e467e11d3f981fae7388f518668のようなハッシュを取得します。

これは16進数のようです。base64でmd5ハッシュを変換しようとすると、まったく異なるハッシュが得られます(長くて醜い:))。

ヘルプ!!!

ありがとうございました!

LE:AZIが指摘したように、openssl/md5.hのMD5メソッドを使用します。

4

2 に答える 2

3

これがmd5を取得するためのC++コードです

#include <openssl/md5.h>
unsigned char *MD5(const unsigned char *d, 
               unsigned long n,
               unsigned char *md);

例:

unsigned char inbuf[] = "aaa&1";
unsigned char outbuf[20];
MD5(inbuf, strlen(inbuf), outbuf);

for (i = 0; i < 20; i++) {
    printf("%02x ", outbuf[i]);
}

16進数がBase64に変換された場合、16進数がBase64に変換16fe1e467e11d3f981fae7388f518668され ます。Fv4eRn4R0/mB+uc4j1GGaA==

これをBase64にエンコードするには、C /C++およびOpenSSLでbase64をエンコードする方法を参照してください。

于 2012-06-28T16:01:01.193 に答える
0

解決策は、AziとMike Seymourが言ったすべてを使用することです...したがって、MD5ハッシュを取得するには、Aziによって提示された解決策を使用する必要があります。次に、JavaのものはMikeが提案したようなものを使用します...それはバイナリからbase64でエンコードします。

私の解決策は、Aziが提供するリンクからコードを調べることでした。

http://tomeko.net/online_tools/hex_to_base64.php?lang=en

そしてそれをC++に移植します。幸い、それはそれほど難しいことではありませんでした... C ++コードが必要な場合は、コメントを残してください。皆さん、ありがとうございました!

于 2012-07-02T09:49:13.643 に答える