【问题标题】:Whats is the best way to encrypt a big array with AES in PHP?在 PHP 中使用 AES 加密大数组的最佳方法是什么?
【发布时间】:2014-04-23 21:21:46
【问题描述】:

状态

我有大量数据(约 2000 个字符串,每个字符串 2000 个字符)要使用对称加密 AES 进行加密。

我的代码目前如下:

加密功能

function encryptAES($content, $key) {
    $iv = mcrypt_create_iv(256, MCRYPT_DEV_RANDOM);
    $iv_base64 = rtrim(base64_encode($iv), '=');
    $encrypted = base64_encode(mcrypt_encrypt(
         MCRYPT_RIJNDAEL_256, 
         $key, 
         $content . md5($content), 
         MCRYPT_MODE_CBC, 
         $iv
    );
    return  $iv_base64 . $encrypted;
}

数组加密

foreach ($fields as $field) {
   $field['encryptedValue'] = encryptAES($field['value'], $SymKey);
}

.

问题

只有字符串可以传递给 $content。如果我只是对数千个字符串进行循环,这段代码可能会很慢。

你能推荐一个更高效的方法吗?

【问题讨论】:

  • 也许序列化数组?

标签: php performance aes mcrypt


【解决方案1】:
  1. serialize() 你的数组。序列化的结果是二进制字符串,mcrypt_encrypt可以接受。
  2. 用一个函数调用加密序列化数组,base64 结果:

    $myArray = [ ... ];
    $content = serialize($myArray);
    
    $iv = mcrypt_create_iv(256, MCRYPT_DEV_RANDOM);
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $content, MCRYPT_MODE_CBC, $iv);
    
  3. 传递给mcrypt_encrypt的数据不需要base64加密。

【讨论】:

  • 我明白你的意思,但这不是我所期望的,因为我想将加密值独立存储在数据库中......作为函数返回,我想要一个包含每个加密数据的数组......我在想没有更好的办法...
  • 嗯...在这种情况下,您必须遍历数组并使用上述算法加密每个值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 2010-09-18
  • 2010-09-13
  • 2020-09-13
相关资源
最近更新 更多