什么是在PHP中使用AES加密大型阵列的最佳方法?

时间:2014-03-18 09:34:01

标签: php performance aes mcrypt

国家

我有大量数据(大约2000个字符串,每个字符串2000个字符串),使用symetric加密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。如果我只是对数千个字符串进行循环,那么这段代码可能会很慢。

你能建议一种更高效的方式吗?

1 个答案:

答案 0 :(得分:2)

  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。