我正在尝试用Java复制旧的Sql Server哈希算法。问题是该算法使用HashBytes(MD5),它根据我正在散列的字符串的类型给出不同的结果。
所以至少,似乎我需要知道如何在java中将字符串的字节作为nvarchar(255)。
我意识到我可以用Java中的sql select来做这个,但我正在寻找一种不这样做的方法。
答案 0 :(得分:0)
byte[] b = str.getBytes("UTF-16LE");
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
return javax.xml.bind.DatatypeConverter.printHexBinary(md.digest(b));
这给了我与某些HASHBYTES('MD5',...)
上的sql server nvarchar(255)
相同的哈希值。关键似乎是UTF-16LE
。