为什么在我的大整数前面加一个减号?

时间:2011-01-08 08:34:27

标签: java

package ewa;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.math.BigInteger;
/**
 *
 * @author Lotus
 */
public class md5Hash {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        String test = "abc";

        MessageDigest md = MessageDigest.getInstance("MD5");
        try {
            md.update(test.getBytes("UTF-8"));
            byte[] result = md.digest();
            BigInteger bi = new BigInteger(result);
            String hex = bi.toString(16);
            System.out.println("Pringting result");
            System.out.println(hex);
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(md5Hash.class.getName()).log(Level.SEVERE, null, ex);
        }


    }
}

我正在测试字节到十六进制的转换,完成后,最终结果在字符串的开头有一个减号,为什么会发生这种情况?我已阅读文档,并说它会添加一个减号,但我不明白。减号会影响哈希结果吗?因为我要将它实现为存储在我的数据库中的哈希密码

2 个答案:

答案 0 :(得分:8)

因为BigInteger恰好为负数,意味着最重要的位为1.如果您想要正数,请使用sign-magnitude constructor

new BigInteger(1, result)

我不清楚为什么要实现自己的MD5哈希包装器。为什么不能将哈希存储为BINARY或BLOB?

答案 1 :(得分:0)

BigIntegers签约。在字节表示中,如果设置了最高位,则显示为负数。解决这个问题的一种方法可能是在数组的开头附加一个0。