【问题标题】:PHP Blowfish encrypt / decrypt with databasePHP Blowfish 使用数据库加密/解密
【发布时间】:2026-01-26 17:15:01
【问题描述】:

我在 * 上找到了一个加密/解密代码。 就是这个:

public function decrypt_blowfish($data,$key){
    try{
        $iv     =   pack("H*" , substr($data,0,16));
        $x      =   pack("H*" , substr($data,16)); 
        $res    =   mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $x , MCRYPT_MODE_CBC, $iv);
        return $res;
    }catch(Exception $ex){
        echo $ex->getMessage();
    }
}

function encrypt_blowfish($data,$key){
    try{
        $iv_size    =   mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
        $iv         =   mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $crypttext  =   mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC, $iv);
        return bin2hex($iv . $crypttext);
    }catch(Exception $ex){
        echo $ex->getMessage();
    }
}

如果我只使用没有数据库值的 php 测试它,它工作正常,但如果我将它与数据库中的值一起使用,我会得到像“Manuel��”而不是“Manuel”之类的东西 - 你能告诉我我的错误是什么?

【问题讨论】:

  • 这可能是一个编码问题 - *.com/questions/279170/utf-8-all-the-way-through 很可能是您找到解决方案的地方,也可能是一个骗局
  • 不要试图变得粗鲁,错误是您正在从该站点获取随机代码。 mcrypt 是废弃软件。 github上有很多PHP正确加密/解密实现的例子。考虑擦除此代码并将其替换为this one
  • 最好不要使用 PHP mcrypt,它是废弃软件,多年未更新,不支持标准 PKCS#7 (née PKCS#5) 填充,仅支持非标准空填充甚至不能用于二进制数据。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。不推荐使用的 mcrypt-extension 将在 PHP 7.2 中删除。而是考虑使用defuseRNCryptor,它们提供了一个完整的解决方案并且正在维护并且是正确的。
  • 请注意,即使是 Blowfish 的作者现在也使用 AES。
  • 谢谢大家,我会尝试 AES 而不是河豚

标签: php encryption blowfish


【解决方案1】:

尝试编码为 64 位并加密字符串,然后在解密后对其进行解码。它会工作......

$newDataToEncrypt=base64_encode($data);

在得到解密后的文本

 $data=base64_decode($decryptData);

试试看

【讨论】: