基础64转换导致Java Base64库导致不正确的结果

时间:2017-09-05 22:46:16

标签: java base64

我的目标是获取一个字符串,(在这种情况下是密码)找到它的MD5哈希,并将其转换为base64。这是我尝试自动登录的浏览器进行加密的第一部分。当我测试密码"测试"时,它会很好。但是,在尝试" asdf"时,我会得到不同的哈希值。我知道这是base64转换部分的问题,因为MD5哈希总是正确的。你可以看到"正确"通过查找" asdf"的MD5哈希来输出(912ec803b2ce49e4a541068d495ab570)并将其粘贴到HEX框中here.

以下代码与"测试"的链接密码 - https://ideone.com/SmaNsR
以下代码与" asdf"的链接password- / OOSrmV(只能发布2个链接)

class myClass {

    public static void main(String[] args) {
        String password = "asdf";
        try {
            System.out.println(password);
            password = (passwordencrypt(password));
            System.out.println(password);

        } catch (NoSuchAlgorithmException ex) {
             System.out.println("oops");
        }
        password = base16to64(password);

        System.out.println(password);

    }

    public static String passwordencrypt(String password) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(password.getBytes());
        byte[] b = md.digest();
        StringBuffer sb = new StringBuffer();
        for (byte b1 : b) {
            sb.append(Integer.toHexString(b1 & 0xff).toString());
        }
        return sb.toString();
    }
    public static String base16to64(String hex){
    return Base64.getEncoder().encodeToString(new BigInteger(hex, 16).toByteArray());
    }

}

编辑:根据jrtapsell的建议,样本输入和输出。

输入:"测试"
我的计划:CY9rzUYh03PK3k6DJie09g ==
应该是什么:CY9rzUYh03PK3k6DJie09g ==

输入:" asdf" 我的程序:AJEuyDss5J5KVBaNSVq1cA == 应该是什么:kS7IA7LOSeSlQQaNSVq1cA ==

1 个答案:

答案 0 :(得分:2)

不要转换为十六进制,然后解码十六进制并编码为base64,简化您的代码 - 直接编码到base64。像,

public static String passwordencrypt(String password) 
        throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(password.getBytes());
    byte[] b = md.digest();
    return base64(b);
}

public static String base64(byte[] bytes) {
    return Base64.getEncoder().encodeToString(bytes);
}

然后移除base16to64中对main的号召,我就

kS7IA7LOSeSlQQaNSVq1cA==

与您链接的网站上的base64字符串匹配。