将java messagedigest在不同的jdk版本上生成不同的MD5哈希?

sse*_*sse 8 java md5 message-digest

我正在使用java消息摘要来创建MD5哈希,用于身份验证.MD5哈希作为varchar2存储在数据库中.我做了一个测试,在我的本地笔记本电脑上的tomcat服务器上创建用户.当我将战争部署到linux redhat上的测试tomcat服务器时,由于哈希不匹配,身份验证失败.我检查了用户名和密码:它们都是正确的.两个Web服务器都指向同一个数据库.

我怀疑在我的本地笔记本电脑上生成的哈希值与测试服务器生成的哈希值不同.我对吗?

下面是我生成哈希的代码.

public static String getMD5Hash(String str) throws Exception
{
    MessageDigest md = MessageDigest.getInstance("MD5");

    md.update(str.getBytes());
    return new String(md.digest());
}
Run Code Online (Sandbox Code Playgroud)

返回的String将保存在数据库表中,该表定义如下

create table authen(
   passport varchar2(50),
   constraint pk_au primary key (passport) USING INDEX TABLESPACE xxxxxxx
);
Run Code Online (Sandbox Code Playgroud)

这是我笔记本电脑上的java版本输出

C:\Users\XXXX>java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

这是redhat服务器上的java版本输出

[xxxxxx@xxxxxxxxx ~]$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

Kal*_*Kal 6

您可能正在使用默认字符集来生成传递给MD5.digest()方法的字节,并且您的笔记本电脑和服务器之间的字符集不同.

这可能是您看到不同结果的原因.否则,它不可能产生不同的结果.

例如 -

byte[] bytesOfMessage = tempStr.getBytes("UTF-8"); // Maybe you're not using a charset here
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] theDigest = md5.digest(bytesOfMessage);
Run Code Online (Sandbox Code Playgroud)