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

似乎是十六进制的。如果我尝试在 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]);
}

如果 Hex16fe1e467e11d3f981fae7388f518668转换为 Base64 然后Hex 转换为 Base64 你会得到Fv4eRn4R0/mB+uc4j1GGaA==

可以参考Howto base64 encode with C/C++ and OpenSSL to encode this to Base64

于 2012-06-28T16:01:01.193 回答
0

解决方案是使用 Azi 和 Mike Seymour 所说的所有内容……因此,要获得 MD5 哈希,您必须使用 Azi 提出的解决方案。然后Java中的东西使用了像迈克建议的东西......它从二进制编码为base64。

我的解决方案是查看 Azi 提供的链接中的代码:

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

并将其移植到 C++ 中。幸运的是,这并不难做到……如果有人想要 C++ 代码,请发表评论。谢谢你们!

于 2012-07-02T09:49:13.643 回答