繁体   English   中英

适用于Android的MD5哈希

[英]MD5 Hashing for Android

好的,这是我的问题。 我正在尝试使用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标志选项……正在输入换行符,并且将所有内容都扔掉了。 谢谢大家

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

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

自己测试一下。 删除最终的String,并明确将pass的值设置为NjljNWZjZWJhYTY1YjU2MGVhZjA2YzNmYmViNDgxYWU0NGI4ZDYxOA ==

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM