用OpenSSL取代Mcrypt

用OpenSSL取代Mcrypt

目前我们在我们的系统上有一个mcrypt实现,用于在PHP应用程序中隐藏一些敏感数据。现在我们有了一个新的要求,我们必须将crypt模块更改为openssl。另一件重要的事情是我们使用密码河豚和模式ecb。所以我开始测试有什么区别以及如何使用openssl解密mcrypt加密字符串。

我使用标准的PHP函数:

  • mcrypt_encrypt与openssl_encrypt

  • mcrypt_decrypt与openssl_decrypt

两种方法都会产生不同的结果。第二件事是在两种类型的给定密码(河豚)和模式(ecb)中需要不同的IV长度(openssl = 0和mcrypt = 56)。

有没有人知道如何在没有大量迁移工作的情况下轻松更改模块?

提前致谢!

更新:

这是代码,我测试了它:

<?php 

function say($message){
    if(!is_string($message)){
        if(!isset($_SERVER["HTTP_USER_AGENT"])) echo "<pre>";
        echo var_export($message, true) . ((!isset($_SERVER["HTTP_USER_AGENT"]) ? "\n" : "<br />"));
        if(!isset($_SERVER["HTTP_USER_AGENT"])) echo "</pre>";
    }else{
        echo $message . ((!isset($_SERVER["HTTP_USER_AGENT"]) ? "\n" : "<br />"));
    }}say("= Begin raw encryption");$key    = "anotherpass";$str    = "does it work";say("  Params:");say("  - String to encrypt '".$str."'");say("  - Key: ".$key);say("");$params = array(
    "openssl"  => array(
        "cipher"    => "BF",
        "mode"      => "ECB",
    ),
    "mcrypt" => array(
        "cipher"    => "blowfish", 
        "mode"      => "ecb",
    ),);

这是我的结果:

= Begin raw encryption  Params:
  - String to encrypt 'does it work'
  - Key: anotherpass= Mcrypt
  Params:
  - InitVector   06a184909d7bf863 (bin2hex)
  - Max keysize  56
  - Cipher       blowfish  - Mode         ecb  Encryption:
  - Encrypted   0e93dce9a6a88e343fe5f90d1307684c (bin2hex)
  - Descrypted  does it work= Openssl
  Params:
  - InitVector   not needed  - Max keysize  0
  - Cipher       BF  - Mode         ECB  Encryption:
  - Encrypted   213460aade8f9c14d8d51947b8231439 (bin2hex)
  - Descrypted  does it work

也许现在有什么想法?

谢谢!


慕丝7291255
浏览 491回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP