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

sut*_*toL 2 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);
        }


    }
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*hen 8

因为BigInteger恰好是负数,意味着最重要的位是1.如果你想要一个正数,请使用符号量构造函数:

new BigInteger(1, result)
Run Code Online (Sandbox Code Playgroud)

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