0

我正在尝试MD5使用以下代码将字符串转换为其表示形式:

public static void main(String[] args) throws NoSuchAlgorithmException {
        String s = "oshai";
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.update(s.getBytes(),0,s.length());
        String md5 = new BigInteger(1,m.digest()).toString(16);
        System.out.println(md5.length());
}

返回的字符串增加了位数(31,所以它可以是一个十六进制数)。我究竟做错了什么?

4

4 回答 4

2

您不想使用 BigInteger。尝试更传统的 toHexString 方法..

public static void main(String[] args) throws NoSuchAlgorithmException {
        String s = "oshai";
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.update(s.getBytes(),0,s.length());
        String string = toHexString(m.digest());
        System.out.println(string);
}

public static String toHexString(byte[] bytes) {
    StringBuilder sb = new StringBuilder();
    for(byte b : bytes) {
        sb.append(String.format("%02x", b));
    }
    return sb.toString();
}
于 2013-12-11T22:46:14.567 回答
2

这种方法肯定有效:

private String hashWithMD5(String text) throws UnsupportedEncodingException, NoSuchAlgorithmException {
    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
    byte[] digest = messageDigest.digest(text.getBytes("UTF-8"));

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < digest.length; i++) {
        sb.append(Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1));
    }

    return sb.toString();
}
于 2013-12-11T22:43:15.043 回答
0

在将字符串转换为加密格式时,我遇到了左侧缺少“00”的错误。

通常使用常用的 md5 方法,您不会在您的应用程序中找到错误。

因此,请使用字符串“sandeep”测试您的应用程序(我使用它是因为它的左侧有一个“00”)。

这个问题搞砸了我的时间,最后我从链接中找到了以下解决方案。

“我在左侧有 00 的 md5 字符串出错,即字符串“sandeep”转换为“DCF16D903E5890AABA465B0B1BA51F”而不是实际的“00DCF16D903E5890AABA465B0B1BA51F”

我最终采用了这种方法,它在我的应用程序中很有效。”

public static  String md5(String inputString) {
    try {
        // Create MD5 Hash
        MessageDigest msgDigest = java.security.MessageDigest.getInstance("MD5");
        msgDigest.update(inputString.getBytes());
        byte msgDigestBytes[] = msgDigest.digest();

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

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

参考: http: //www.coderexception.com/CbHuB1uHPWxXUQXi/converting-string-to-md5-gives-add-number-of-digits

于 2014-04-23T06:55:28.673 回答
-2

使用这种方法:

公共静态字符串 md5(字符串输入){

    String md5 = null;

    if (null == input)
        return null;

    try {

        // Create MessageDigest object for MD5
        MessageDigest digest = MessageDigest.getInstance("MD5");

        // Update input string in message digest
        digest.update(input.getBytes(), 0, input.length());

        // Converts message digest value in base 16 (hex)
        md5 = new BigInteger(1, digest.digest()).toString(16);

    } catch (NoSuchAlgorithmException e) {

        e.printStackTrace();
    }
    return md5;
}
于 2013-12-11T22:45:41.377 回答