将字符串转换为md5会增加位数

时间:2013-12-11 22:41:15

标签: java md5 message-digest

我正在尝试使用以下代码将String转换为其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());
}

返回的String添加了位数(31,因此它可以是十六进制数)。我做错了什么?

4 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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();
}

答案 2 :(得分:0)

我遇到错误的错误&#34; 00&#34;在左侧,将字符串转换为加密格式。

通常情况下,您无法使用常见的md5方法在应用中找到错误。

所以,请用字符串&#34; sandeep&#34;测试你的应用程序。 (我使用它是因为它在左侧有一个&#34; 00&#34;

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

&#34; md5字符串在leftside时出现错误,即字符串“sandeep”转换为“DCF16D903E5890AABA465B0B1BA51F”而不是实际的“00DCF16D903E5890AABA465B0B1BA51F

我最终使用了这种方法,在我的应用中很酷。&#34;

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

答案 3 :(得分:-2)

使用此方法:

  

public static String md5(String input){

    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;
}