我有关于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哈希,我会得到一个完全不同的哈希(更长和更丑):)。
帮助!!!
谢谢!
L.E。:我使用openssl / md5.h中的MD5方法,正如AZI指出的那样。
答案 0 :(得分: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]);
}
如果16fe1e467e11d3f981fae7388f518668
的十六进制转换为Base64然后转换为Hex to Base64,您将获得Fv4eRn4R0/mB+uc4j1GGaA==
可以参考Howto base64 encode with C/C++ and OpenSSL将其编码为Base64
答案 1 :(得分:0)
解决方案是使用Azi和Mike Seymour所说的一切......所以,要获得MD5哈希,你必须使用Azi提供的解决方案。然后Java中的东西使用像Mike建议的东西......它在二进制编码的base64中编码。
我的解决方案是查看Azi提供的链接中的代码:
http://tomeko.net/online_tools/hex_to_base64.php?lang=en
并将其移植到C ++中。幸运的是,做起来并不难...... 如果有人想要C ++代码,请发表评论。 谢谢大家!