簡體   English   中英

Java中PHP的crypt函數的等價物

[英]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:

http://www.jasypt.org/

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM