[英]Equivalent of PHP's crypt function in Java
我正在將我的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();
}
這是一個舊線程,但我遇到了同樣的問題,並找到了一個不同的解決方案。 您可以在Apache Commons Codec 1.7庫中使用UnixCrypt / Md5Crypt類。
例如,你可以打電話
UnixCrypt.crypt(string, salt)
要么
Md5Crypt.md5Crypt(byte[], salt)
我沒有考慮其他加密類型,但我想他們也是其他的實用程序。
您必須知道使用了什么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());
您似乎必須使用已填充了無法丟棄的密碼的舊數據庫,因此您不能只使用SHA-1 切換到鹽漬MessageDigest 。 而且你的問題變得更加復雜,因為PHP的crypt是一個可能使用多種算法之一的包裝器。 但是我們假設您的PHP使用原始的基於DES的UNIX crypt,那么您所需要的只是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版本(hash以$ 1 $開頭),你可以在這里找到一個Java實現,
http://www.java2s.com/Open-Source/Java-Document/Groupware/LibreSource/md5/MD5Crypt.java.htm
請注意他們使用自己的MD5課程。 我不確定它是否與標准MD5相同。
我相信你也可以找到其他哈希算法的Java實現。
我可以推薦這個: MD5Crypt實現
MD5Crypt.crypt("youPassword"); // output: $1$zSiw0koU$i3Srfmoxx4VPePJHWqAuK/
這是為數不多的實現之一,對我有用。
好吧,就我所知,PHP的crypt實際上並不是加密。 它只是我相信的一些單向散列函數的包裝器,所以如果你當前的PHP站點使用crypt的MD5或SHA256或其他什么,我希望你可以在Java中找到那些等效的散列類/函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.