相当于Java中PHP的crypt函数

2022-09-03 13:47:19

我正在将我的PHP代码迁移到Google App Engine - Java。
因此,我需要一个相当于Java中PHP的crypt函数,
因为我已将使用crypt的注册用户
的所有密码存储在我的数据库中。

编辑1:这是我用于加密密码的php代码:

$password = “test123”;
$pwd = crypt($password,$password);
回声$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();
            }

答案 1

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

例如,您可以致电

UnixCrypt.crypt(string, salt)

Md5Crypt.md5Crypt(byte[], salt)

我还没有研究过其他加密类型,但我想还有其他实用程序。


答案 2

你必须知道使用了什么PHP密码的实现(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());

推荐