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();
}
# 1 楼答案
PHP的crypt支持多个哈希函数。如果您使用MD5版本(哈希以$1$开头),您可以在这里找到Java实现
http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt.java.htm
请注意,他们使用自己的MD5类。我不确定它是否与标准MD5相同
我相信您也可以找到其他哈希算法的Java实现
# 2 楼答案
据我所知,PHP的密码实际上不是加密。我相信它只是一些单向散列函数的包装器,所以如果您当前的PHP站点使用crypt的MD5或SHA256或其他什么,我希望您可以在Java中找到这些等效的散列类/函数
# 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/
# 4 楼答案
这是一个旧线程,但我遇到了相同的问题,并找到了不同的解决方案。您可以使用Apache Commons Codec1.7库中的UnixCrypt/Md5Crypt类
例如,你可以打电话
或
我没有研究过其他加密类型,但我认为它们也是其他实用程序
# 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获取选项列表
# 6 楼答案
您必须知道使用了什么PHP crypt实现(MD5?SHA256?SHA512?)因为有几个,取决于您的操作系统:http://php.net/manual/fr/function.crypt.php
Java等价类是MessageDigest。创建此类的实例时,提供哈希算法,例如: