您好 我正在寻找一种方法来产生与Java中的MySQL的PASSWORD函数相同的结果。 在Java代码中有一个MySQL的PASSWORD()函数的实现吗?
例如:
密码:123 在MySQL PASSWORD('123') - > * 23AE809DDACAF96AF0FD78ED04B6A265E05AA257
我希望你能帮助我
答案 0 :(得分:4)
根据@ypercube指出的答案,MySQL PASSWORD()只是sha1,应用了两次。
public static String MySQLPassword(String plainText) throws UnsupportedEncodingException {
byte[] utf8 = plainText.getBytes("UTF-8");
return "*" + DigestUtils.shaHex(DigestUtils.sha(utf8)).toUpperCase();
}
编辑:测试,添加了throws子句,大写和前缀“*”。
工作代码(替换无效的shaHex()):
public static String MySQLPassword(String plainText)
throws UnsupportedEncodingException
{
byte[] utf8 = plainText.getBytes("UTF-8");
byte[] test = DigestUtils.sha(DigestUtils.sha(utf8));
return "*" + convertToHex(test).toUpperCase();
}
答案 1 :(得分:1)
这个问题几乎相同 - 将“Java”替换为“.NET或MS-SQL-Server”:
<强> simulating-mysqls-password-encryption-using-net-or-ms-sql 强>
它将让您了解如何将MySQL PASSWORD()
函数转换为Java。
请注意PASSWORD()
目的是供MySQL内部使用,其他更安全的方法应该用于应用程序代码中的散列和身份验证。除非你以某种方式限制使用这个。
答案 2 :(得分:1)
以下是使用MessageDigest
的示例,以及转换为HEX字符串的示例。所以,只需使用它。
http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xml
答案 3 :(得分:0)
稍微更新了itsadok's answer。
public static String MySQLPassword(String plainText) throws UnsupportedEncodingException {
byte[] utf8 = plainText.getBytes("UTF-8");
return "*" + DigestUtils.sha1Hex(DigestUtils.sha1(utf8)).toUpperCase();
}