来自 Web 服务的相同字符串的 Java md5 哈希对于每个事务都是不同的

标签 java web-services md5

我正在尝试比较来自 Web 服务的 java 密码。

我使用以下命令从命令行调用服务:

curl -d '[{"usr":"joe","password":"joe"}]' http://mydomain.com:8080/myservice/login

我解析 JSON 并将密码传递给哈希方法。

我的哈希方法如下:

 private String createHash(String password){

    byte[] bytesOfMessage = null;
    try {
        bytesOfMessage = password.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("MD5");

    } catch (NoSuchAlgorithmException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    String thedigest = md.digest(bytesOfMessage).toString();
    System.out.println("passed in: "+thedigest);

    return thedigest;
}

问题是每次我使用完全相同的密码调用此方法时,打印的哈希值都不同。如何让密码具有相同的哈希值,以便我可以比较密码并对用户进行身份验证?

谢谢!

最佳答案

digest() 方法返回一个 byte[]toString() 方法返回 byte[] 正在打印字节数组的对象标识,而不是内容。一般来说,为了打印出byte[]的结果,需要将字节转换为可打印的字符串(通常使用十六进制编码或base64编码)。十六进制编码经常用于 md5 校验和,example here .

关于来自 Web 服务的相同字符串的 Java md5 哈希对于每个事务都是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268962/

相关文章:

java - Brainfuck 解释器行为不端

php - 使用 Swift 启动 PHP

ios - POST 的 Restkit 进度信息

java - 如何让oracle db支持md5加密?

java - 上传新文件时如何同时获取文件MD5和SHA1校验和?

java - 如何使用 XPATH 和 Jtidy 获取 <div> 元素内文本节点的值

java - 在 Java 中使用静态工厂方法和常量进行生成

java - Java中无限并行流图减少有时间限制的管道

java - Spring @Autowired 在 @Endpoint 中不起作用