尝试将字符串转换为MD5时,我做错了什么

时间:2016-08-17 19:52:17

标签: java sql string passwords md5

我正在使用一个登录框架,该框架根据SQL数据库中的密码检查用户输入密码。我将文本转换为MD5以使用以下

存储在数据库中

HASHBYTES('MD5', 'JavaTest')这就产生了5E58D71FBD6D17577AAAB8711264A813。

然后在java中我使用以下代码尝试将相同的密码“JavaTest”转换为MD5进行比较。

MessageDigest m = MessageDigest.getInstance("MD5");
            m.update(password.getBytes());
            byte[] digest = m.digest();
            BigInteger bigInt = new BigInteger(1, digest);
            hashText = bigInt.toString();

但是产生了字符串150157350912923000195076232128194914284

我做错了什么?

编辑:我不相信这是重复的,因为我已经研究了答案,它已经让我这么远,但我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:1)

只需将radix参数传递给bigInt.toString即可。如果您需要十六进制表示传递16作为基数,如下所示:

hashText = bigInt.toString(16);

  

public String toString(int radix)

     

返回String的String表示形式   给定基数中的这个BigInteger。如果基数超出范围   从Character.MIN_RADIX到Character.MAX_RADIX,包括它   默认为10(与Integer.toString的情况一样)。该   使用Character.forDigit提供的数字到字符映射,和   如果合适,可以添加减号。 (这种表示是   与(String,int)构造函数兼容。)

     

<强>参数:

     

基数 -   字符串表示的基数。返回:表示的字符串   这个BigInteger在给定的基数中。

此外,你可以构建没有BigInteger的十六进制字符串形式的摘要字节数组,如下所示:

public static String bytesToHex(byte[] bytes) {
    StringBuilder builder = new StringBuilder();
    for(byte b : bytes) {
        builder.append(String.format("%02x", b));
    }
    return builder.toString();
}