【问题标题】:Cannot get the same result from a java md5 hash as a python md5 hash [closed]无法从 java md5 哈希中获得与 python md5 哈希相同的结果 [关闭]
【发布时间】:2017-01-24 03:44:14
【问题描述】:

我正在尝试将我的一些代码从 Python 移植到 Java,但开始有点艰难,因为我对 Java 的熟悉程度不如我对 Python 的熟悉。我正在尝试做的基本事情是复制一个流程,如下所示:

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 哈希的十六进制摘要,而不是我需要的。我已经尝试了很多方法来将该十六进制转换回我需要获得相同的 base64 结果,但我没有运气。
有什么方法可以帮助我完成这个过程吗?
请注意,如果有任何问题,我正在使用 Android Studio。

【问题讨论】:

    标签: java android python hash


    【解决方案1】:

    我猜你在通过摘要传递它之前没有将你的 java 字符串转换为正确的编码。我将使用 UTF-8,因为它与 python 将使用的匹配。

    结合Base64 Encoding in JavaHow 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==

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 2021-05-04
      • 2020-12-08
      • 2019-12-20
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多