MD5 Hashing for Android

时间:2014-04-29 17:50:45

标签: java android hash

好的,这是我的问题。我正在尝试使用MD5哈希加密字符串。这是我试图散列的字符串:NjljNWZjZWJhYTY1YjU2MGVhZjA2YzNmYmViNDgxYWU0NGI4ZDYxOA==

以下是预期输出:aaf53a928ca9baa6df03a5fe6e3c7b71

以下是我在Android应用程序中获得的内容:3cc9a8b9d101349af1b4e17ae3b7450f

现在这是我用来执行此操作的代码:

public final String computeMD5Hash(final String pass){
    try {
        // Create MD5 Hash
        MessageDigest digest = MessageDigest.getInstance("MD5");
        digest.update(pass.getBytes());
        byte messageDigest[] = digest.digest();

        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < messageDigest.length; i++) {
            String h = Integer.toHexString(0xFF & messageDigest[i]);
            while (h.length() < 2)
                h = "0" + h;
            hexString.append(h);
        }
        System.out.println(hexString.toString());
        return hexString.toString();

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    return "";

这个代码在Android上运行我得到了上面的意外结果,但当我运行这个代码时,就像传入相同字符串的java程序一样,我得到了预期的输出...

到底是怎么回事?我已经被困住了好几天,并在互联网上寻找线索。我尝试将字节更改为UTF-8,ASCII,ISO-8859-1,并使用默认值。总是得到不正确的字符串。

----------- ----------编辑解------

我想通了,我正在使用Base64.encodeToString(bytes,Base64.Default)我应该使用Base63.NO_WRAP标志选项...正在输入换行符并将所有内容都丢掉。谢谢大家

1 个答案:

答案 0 :(得分:1)

看来你必须传递错误的字符串。我只是自己运行你的代码,输出是:aaf53a928ca9baa6df03a5fe6e3c7b71

我直接将传入的字符串设置为您提供的字符串。

亲自测试一下。删除最后的String并将pass的值显式设置为NjljNWZjZWJhYTY1YjU2MGVhZjA2YzNmYmViNDgxYWU0NGI4ZDYxOA ==