我正在尝试将我的一些代码从Python移植到Java,并且由于我不像Java那样熟悉Java,所以它有点粗略开始。我要做的基本事情是复制一个过程,如下所示:
import hashlib
myVar = hashlib.md5("Test")
#Which is'\x0c\xbcf\x11\xf5T\x0b\xd0\x80\x9a8\x8d\xc9Za['
#Then proceed to do base64 encoding
base64.encodestring(myVar)
#Which then gives the output of 'DLxmEfVUC9CAmjiNyVphWw==\n'
但是,我不能在Java中复制这个过程,因为我找到的每个方法都给了我md5哈希的hexdigest,而不是我需要的。我已经尝试了很多东西来将这个十六进制转换成我需要获得相同的base64结果,但我没有运气。
有没有什么方法可以帮助我完成这个过程?
请注意,如果重要的话,我正在使用Android Studio。
答案 0 :(得分:1)
我猜测你在将java字符串传递给摘要之前没有将其转换为正确的编码。我将使用UTF-8,因为它与python将使用的匹配。
结合Base64 Encoding in Java和How can I generate an MD5 hash?的答案似乎很简单,似乎对我有用:
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Base64;
public class md5test {
public static void main(String[] args) throws Exception {
String yourString = "Test";
byte[] bytesOfMessage = yourString.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);
byte[] encodedBytes = Base64.encodeBase64(thedigest);
System.out.println("encodedBytes " + new String(encodedBytes));
}
}
打印encodedBytes DLxmEfVUC9CAmjiNyVphWw==