如何在php中使用Blowfish算法解密?

时间:2011-04-07 12:24:25

标签: php blowfish

我应该编写一个PHP脚本来解密Blowfish加密数据。

我收到的用于解密的数据是由另一个应用程序加密的(我无法访问它)。

使用javascript脚本(blowfish.js)检查数据时,数据解密正常。

如何在php中解密数据?

我在PHP中尝试过mcrypt函数。如果我使用相同的代码加密和解密,代码工作正常。如果我解密加密代码(在另一个应用程序中),它会给垃圾邮件。

不知道要设置什么模式。

任何人都可以在不使用mcrypt的情况下建议使用下面的代码或任何PHP BlowFish代码吗?

<?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/>";

?>

3 个答案:

答案 0 :(得分:1)

解密时使用的$iv必须与加密数据时使用的 Initialization Vector 相同。您自己的函数通过将IV添加到密文(return $iv.$crypttext;)来传输此信息,但另一个应用程序可能不会这样做。

您需要找出其他应用使用的IV,并将其传递给您自己的代码。由于decrypt函数从密文的开头读取IV,因此您可以简单地将其添加到其中。

此外,您可以通过使用encrypt函数和其他应用程序加密相同的文本来测试一下。如果输出的长度不同(您自己的长度较大),那么应用程序不会在密文中包含IV,您必须以其他方式获取此信息。

当然,您的代码和其他应用程序之间使用的密码模式(CFB)必须相同。

答案 1 :(得分:1)

这里有一个很好的,易于实施的解决方案:

www.codewalkers.com: Encrypt and Decrypt using Blowfish

答案 2 :(得分:0)

有一个PEAR库用于创建河豚插入,允许您选择天气使用MCRYPT Libs,或纯粹的原生PHP:

您可以在此处查看图书馆:Crypt_Blowfish 1.1.0RC2

选择PHP.php文件将向您显示在本机PHP中进行硬编码的源代码。