Java中PHP的crypt函数的等价物

dha*_*0us 14 php java encryption

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

编辑1:这是我加密密码的PHP代码:

$ password ="test123";
$ pwd = crypt($ password,$ password);
echo $ pwd;

输出是(在Windows上以及HostMonser上的基于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();
            }
Run Code Online (Sandbox Code Playgroud)

小智 12

这是一个旧线程,但我遇到了同样的问题,并找到了一个不同的解决方案.您可以在Apache Commons Codec 1.7库中使用UnixCrypt/Md5Crypt类.

例如,你可以打电话

UnixCrypt.crypt(string, salt)
Run Code Online (Sandbox Code Playgroud)

要么

Md5Crypt.md5Crypt(byte[], salt)
Run Code Online (Sandbox Code Playgroud)

我没有考虑其他加密类型,但我想他们也是其他的实用程序.


Ben*_*ine 5

您必须知道使用了什么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());
Run Code Online (Sandbox Code Playgroud)