MD5在Java中生成31个字符的散列 [英] MD5 Generates 31 character hash in Java

查看:149
本文介绍了MD5在Java中生成31个字符的散列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下代码块来生成MD5哈希值:

I am using following code block to generate MD5 hashes:

public static String encode(String data) throws Exception {

    /* Check the validity of data */
    if (data == null || data.isEmpty()) {
        throw new IllegalArgumentException("Null value provided for "
                + "MD5 Encoding");
    }

    /* Get the instances for a given digest scheme MD5 or SHA */
    MessageDigest m = MessageDigest.getInstance("MD5");

    /* Generate the digest. Pass in the text as bytes, length to the
     * bytes(offset) to be hashed; for full string pass 0 to text.length()
     */
    m.update(data.getBytes(), 0, data.length());

    /* Get the String representation of hash bytes, create a big integer
     * out of bytes then convert it into hex value (16 as input to
     * toString method)
     */
    String digest = new BigInteger(1, m.digest()).toString(16);

    return digest;
}

当我使用String数据运行上述代码段作为 [12,B006GQIIEM,MH-ANT2000] ,输出是一个31个字符的散列 - 268d43a823933c9dafaa4ac0e756d6a

When I run the above code segment with String data as [12, B006GQIIEM, MH-ANT2000], the output is a 31 character hash - 268d43a823933c9dafaa4ac0e756d6a.

MD5哈希函数有什么问题或上面的代码有一些问题吗?

Is there any problem with the MD5 hash function or there is some problem in the code above?

推荐答案

您的代码中唯一的问题是,当 MSB 小于Ox10时,结果散列字符串将只有31个字节,而不是32字节,缺少前导零。

The only issue in your code is when MSB is less than Ox10, the result hash string will only have 31 bytes, instead of 32 bytes, missing the leading zero.

以这种方式创建你的md5字符串:

Create your md5 string in this way:

            byte messageDigest[] = m.digest();

            hexString = new StringBuffer();
            for (int i=0;i<messageDigest.length;i++) {
                String hex=Integer.toHexString(0xFF & messageDigest[i]);
                if(hex.length()==1)
                    hexString.append('0');

                hexString.append(hex);
            }

这篇关于MD5在Java中生成31个字符的散列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆