我有大量数据(大约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。如果我只是对数千个字符串进行循环,那么这段代码可能会很慢。
你能建议一种更高效的方式吗?
答案 0 :(得分:2)
serialize()
你的数组。序列化的结果是二进制字符串,mcrypt_encrypt
可以接受。使用一个函数调用加密序列化数组,并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);
传递给mcrypt_encrypt
的数据不需要base64。