我正在将我的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();
}
答案 0 :(得分:11)
这是一个旧线程,但我遇到了同样的问题并找到了不同的解决方案。您可以使用Apache Commons Codec 1.7库中的UnixCrypt / Md5Crypt类。
例如,您可以致电
UnixCrypt.crypt(string, salt)
OR
Md5Crypt.md5Crypt(byte[], salt)
我没有考虑其他加密类型,但我想他们也是其他实用程序。
答案 1 :(得分: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());
答案 2 :(得分:2)
您似乎必须使用已填充了无法丢弃的密码的旧数据库,因此您不能只使用switch to a salted MessageDigest,最好使用SHA-1。而且你的问题变得更加复杂,因为PHP的crypt是might use one of several algorithms的包装器。但是我们假设您的PHP使用原始的基于DES的UNIX crypt,那么您所需要的只是Java中的实现。据我所知,标准Java安装中没有实现UNIX的crypt,但您可能需要look here来获取选项列表。
答案 3 :(得分:1)
你需要看看java.security类(曾经是JCE的东西):
在那里,你会找到你需要做的一切(取决于你需要的算法)。
http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/package-summary.html
e.g。适用于MD5 / SHA等的MessageDigest:
http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/MessageDigest.html
请在此处针对Google App Engine白名单查看这些内容,我不确定支持哪些内容,哪些内容不支持。
http://code.google.com/appengine/docs/java/jrewhitelist.html
java.security的东西有时可能会有点麻烦,你可能还想使用Jasypt - 这是一个更简化的API,适用于任何JCE:
答案 4 :(得分:1)
PHP的crypt支持多个哈希函数。如果你使用MD5版本(hash以$ 1 $开头),你可以在这里找到一个Java实现,
http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt.java.htm
请注意他们使用自己的MD5课程。我不确定它是否与标准MD5相同。
我相信你也可以找到其他哈希算法的Java实现。
答案 5 :(得分:0)
嗯,就我所知,PHP的crypt实际上并不是加密。它只是我相信的一些单向散列函数的包装器,所以如果你当前的PHP站点使用crypt的MD5或SHA256或其他什么,我希望你可以在Java中找到那些等效的散列类/函数。
答案 6 :(得分:0)
我可以推荐这个: MD5Crypt implementation
MD5Crypt.crypt("youPassword"); // output: $1$zSiw0koU$i3Srfmoxx4VPePJHWqAuK/
这是少数几个适合我的实现之一。