【发布时间】:2011-03-18 13:20:24
【问题描述】:
我正在将我的 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();
}
【问题讨论】:
-
请告诉我您没有使用默认 (DES) crypt 算法....现代 unixen 不附带 crypt 实用程序是有原因的——它以前被破坏过。
-
@Billy ONeal:PHP 的默认设置取决于操作系统。在 Linux/BSD 上,它默认为 salted MD5(非常旧的版本除外)。较新的版本甚至可能使用较新的方案,例如盐渍 SHA512。
-
@Billy ONeal:但是,dta just 发布的代码确实是 DES……必须在 PHP 5.2 或更低版本的 Windows 机器上。
-
对于 MessageDigest 类,您不能调用 update() 方法两次。它导致加密密码“test123test123”而不是“test123”。
-
我调用了它两次,因为我认为它会处理“盐”,就像 PHP 的 crypt 一样。
标签: java php encryption