有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中PHP的crypt函数的等价物

我正在将我的PHP代码迁移到Google App Engine-Java
所以我需要一个与Java中PHP的crypt函数等价的函数,
因为我已经存储了注册用户的所有密码
在我的数据库中使用crypt

编辑1: 下面是我加密密码的php代码:

$password=“test123”
$pwd=crypt($password,$password)
echo$pwd

输出是(在Windows上以及在主机上的基于linux的服务器上):
temjCCsjBECmU

有人能给我同等的java代码吗
我尝试过各种排列&;与
的组合 MessageDigest类,但无法正确获取它

编辑2
下面是我认为可行但没有成功的示例代码:

try {
                {
                    String password = "test123";
                    MessageDigest digest = MessageDigest.getInstance( "MD5" ); 
                    byte[] passwordBytes = password.getBytes( ); 

                    digest.reset( );
                    digest.update( passwordBytes );
                    digest.update( passwordBytes );
                    byte[] message = digest.digest( );

                    StringBuffer hexString = new StringBuffer();
                    for ( int i=0; i < message.length; i++) 
                    {
                        hexString.append( Integer.toHexString(
                            0xFF & message[ i ] ) );
                    }
                    String encrypted = hexString.toString();
                    System.out.println(encrypted);
                  } } catch (NoSuchAlgorithmException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

共 (6) 个答案

  1. # 2 楼答案

    据我所知,PHP的密码实际上不是加密。我相信它只是一些单向散列函数的包装器,所以如果您当前的PHP站点使用crypt的MD5或SHA256或其他什么,我希望您可以在Java中找到这些等效的散列类/函数

  2. # 3 楼答案

    您需要看看java。安全类(用于JCE的内容):

    在那里你会找到你想要做的一切(取决于你需要的算法)

    http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/package-summary.html

    例如,MD5/SHA等的消息摘要:

    http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/MessageDigest.html

    在这里对照谷歌应用程序引擎白名单检查这些,我不确定哪些支持哪些不支持

    http://code.google.com/appengine/docs/java/jrewhitelist.html

    爪哇。安全性方面的东西有时会有点麻烦,您也可以选择使用Jasypt,这是一种更简化的API,可用于任何JCE:

    http://www.jasypt.org/

  3. # 5 楼答案

    似乎您必须使用已经填充了无法丢弃的密码的遗留数据库,因此您不能仅使用switch to a salted MessageDigest,最好使用SHA-1。您的问题变得更加复杂,因为PHP的crypt是一个might use one of several algorithms的包装器。但是让我们假设您的PHP使用原始的基于DES的UNIX密码,那么您只需要在Java中实现它。据我所知,在标准Java安装中没有UNIX的crypt实现,但是您可能想look here获取选项列表

  4. # 6 楼答案

    您必须知道使用了什么PHP crypt实现(MD5?SHA256?SHA512?)因为有几个,取决于您的操作系统:http://php.net/manual/fr/function.crypt.php

    Java等价类是MessageDigest。创建此类的实例时,提供哈希算法,例如:

    MessageDigest md = MessageDigest.getInstance("MD5");
    MessageDigest md2 = MessageDigest.getInstance("SHA-256");
    MessageDigest md3 = MessageDigest.getInstance("SHA-512");
    // etc.
    byte[] encryptedPassword = md.digest("yourPassword".getBytes());