Java中PHP的crypt函数的等价物
我正在将我的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(); }
您必须知道使用了什么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());
这是一个旧线程,但我遇到了同样的问题,并找到了一个不同的解决方案。 您可以在Apache Commons Codec 1.7库中使用UnixCrypt / Md5Crypt类。
例如你可以打电话
UnixCrypt.crypt(string, salt)
要么
Md5Crypt.md5Crypt(byte[], salt)
我没有考虑其他加密类型,但我想他们也是其他的实用程序。
- org.apache.commons.codec.digest.UnixCrypt
- org.apache.commons.codec.digest.Md5Crypt
您似乎必须使用已填充了无法丢弃的密码的旧数据库,因此您不能只使用SHA-1 切换到盐渍MessageDigest 。 而且你的问题变得更加复杂,因为PHP的crypt是一个可能使用多种算法之一的包装器。 但是我们假设您的PHP使用原始的基于DES的UNIX加密,那么您所需要的只是Java中的实现。 据我所知,标准Java安装中没有实现UNIX的crypt,但您可能希望在此处查看选项列表。
你需要看一下java.security类(曾经是JCE的东西):
在那里,您将找到所需的一切,以满足您的需求(取决于您需要的算法)。
http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/security/package-summary.html
例如,MessageDigest for MD5 / SHA等:
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:
PHP的crypt支持多个哈希函数。 如果您使用MD5版本(哈希以$ 1 $开头),您可以在这里找到Java实现,
http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt.java.htm
请注意他们使用自己的MD5课程。 我不确定它是否与标准MD5相同。
我相信你也可以找到其他哈希算法的Java实现。
好吧,就我所知,PHP的crypt实际上并不是加密。 它只是我相信的一些单向散列函数的包装器,所以如果你当前的PHP站点使用crypt的MD5或SHA256或其他什么,我希望你可以在Java中找到那些等效的散列类/函数。
我可以推荐这个: MD5Crypt实现
MD5Crypt.crypt("youPassword"); // output: $1$zSiw0koU$i3Srfmoxx4VPePJHWqAuK/
这是少数几个适用于我的实现之一。