C ++与Java中的md5 base64编码器

时间:2012-06-28 15:36:32

标签: java c++ md5

我有关于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指出的那样。

2 个答案:

答案 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 ++代码,请发表评论。 谢谢大家!