用Java实现MySQL的PASSWORD()函数

时间:2011-05-05 07:36:41

标签: java php mysql

您好 我正在寻找一种方法来产生与Java中的MySQL的PASSWORD函数相同的结果。 在Java代码中有一个MySQL的PASSWORD()函数的实现吗?

例如:

密码:123 在MySQL PASSWORD('123') - > * 23AE809DDACAF96AF0FD78ED04B6A265E05AA257

我希望你能帮助我

4 个答案:

答案 0 :(得分:4)

根据@ypercube指出的答案,MySQL PASSWORD()只是sha1,应用了两次。

使用Apache Commons Codec

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();
    }