【问题标题】:How to decrypt using Blowfish algorithm in php?如何在 php 中使用 Blowfish 算法解密?
【发布时间】:2014-01-06 16:32:00
【问题描述】:

我应该编写一个 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/>";

?>

【问题讨论】:

    标签: php blowfish


    【解决方案1】:

    解密时使用的$iv必须与加密数据时使用的Initialization Vector相同。您自己的函数通过将 IV 附加到密文 (@​​987654323@) 来传输此信息,但其他应用程序可能不会这样做。

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

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

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

    【讨论】:

    • 感谢您的信息和建议。我会检查的。
    【解决方案2】:

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

    www.codewalkers.com: Encrypt and Decrypt using Blowfish

    【讨论】:

    • 尝试引用部分解决方案,以便即使链接断开,您的答案仍然有效。
    【解决方案3】:

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

    你可以在这里查看图书馆:Crypt_Blowfish 1.1.0RC2

    选择 PHP.php 文件将显示在原生 PHP 中硬编码的源代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多