2011-04-07 106 views
3

我應該寫一個PHP腳本來解密Blowfish加密數據。如何解密在PHP中使用Blowfish算法?

我收到的用於解密的數據由另一個應用程序加密(我無法訪問它)。

當我使用JavaScript腳本(blowfish.js)檢查數據時,數據解密正常。

我該如何解密php中的數據?

我已經嘗試過PHP中的mcrypt函數。如果我使用相同的代碼進行加密和解密,代碼工作正常。如果我解密一個加密的代碼(在另一個應用程序),它會給垃圾。

不知道要設置的模式。

任何人都可以在下面的代碼或任何PHP BlowFish代碼建議不使用mcrypt?

<?php 

class Encryption 
{ 
    static $cypher = 'blowfish'; 
    static $mode = 'cfb'; 
    static $key = '12345678'; 

    public function encrypt($plaintext) 
    { 
     $td = mcrypt_module_open(self::$cypher, '', self::$mode, ''); 
     $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
     mcrypt_generic_init($td, self::$key, $iv); 
     $crypttext = mcrypt_generic($td, $plaintext); 
     mcrypt_generic_deinit($td); 
     return $iv.$crypttext; 
    } 

    public function decrypt($crypttext) 
    { 
     $plaintext = ""; 
     $td  = mcrypt_module_open(self::$cypher, '', self::$mode, ''); 
     $ivsize = mcrypt_enc_get_iv_size($td); 
     $iv  = substr($crypttext, 0, $ivsize); 
     $crypttext = substr($crypttext, $ivsize); 
     if ($iv) 
     { 
      mcrypt_generic_init($td, self::$key, $iv); 
      $plaintext = mdecrypt_generic($td, $crypttext); 
     } 
     return $plaintext; 
    } 
} 



$encrypted_text = Encryption::encrypt('this text is unencrypted'); 
echo "ENCRY=".$encrypted_text;echo "<br/>"; 

////I am using this part(decryption) coz data already encryption 
// Encrypted text from app 
$encrypted_text = '29636E7ADA7081E7F5D73121C45E20D5'; 
// Decrypt text 
$decrypted_text = Encryption::decrypt($encrypted_text); 
    echo "ENCRY=".$decrypted_text;echo "<br/>"; 

?> 

回答

0

有一個PEAR庫創建河豚encyptions,讓您選擇天氣使用的mcrypt利布斯,或純粹的原生PHP:

您可以查看這裏的圖書館:Crypt_Blowfish 1.1.0RC2

選擇PHP.php文件將向您顯示在本地PHP中進行硬編碼的源代碼。

1

解密時使用的$iv必須與加密數據時使用的Initialization Vector相同。您自己的功能通過將IV添加到密文(return $iv.$crypttext;)來傳輸此信息,但其他應用程序可能不會這樣做。

您需要找出其他應用使用的IV,並將其傳遞給您自己的代碼。由於decrypt函數從密文的開始處讀取IV,因此您可以簡單地在其前面加上它。

此外,您可以通過使用encrypt函數和其他應用程序加密相同的文本來測試一下。如果輸出的長度不一樣(你自己的長度更大),那麼應用程序不會將IV包含在密文中,並且您必須以另一種方式獲取這些信息。

當然,使用的密碼模式(CFB)在您的代碼和其他應用程序之間必須相同。

+0

謝謝你的信息和建議。我會查一下。 – Sangam254 2011-04-07 12:58:19