【发布时间】:2012-06-28 15:36:32
【问题描述】:
我有一个关于 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.:正如 AZI 所指出的,我使用 openssl/md5.h 中的 MD5 方法。
【问题讨论】:
-
请向我们展示您正在使用的 C++ 代码的相关部分。
-
我猜,如果函数给你一个十六进制字符串,你必须把它转换成字节序列
{0x16,0xfe,0x1e,...,0x68},然后base-64编码。不过,我对图书馆不够熟悉,无法给出正确的答案。 -
someString.getBytes()使用默认的操作系统/语言编码;如果 C++ 也没有这样做,最好明确给出编码:someString.getBytes("UTF-8")或"Windows-1252"。 不幸的是,您的代码需要在多台计算机上运行并非不可能。对于 C++,请搜索“Base64Encode”。