我正在使用OpenSSL扩展创建一个对某些数据执行简单加密/解密的类。 这是两个功能:
private function encryptData($data)
{
$iv = openssl_random_pseudo_bytes(16);
$encrypted_data = openssl_encrypt($data, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encrypted_data);
}
private function decryptData($data)
{
$decoded_data = base64_decode($data);
$iv = mb_substr($decoded_data, 0, 16);
$encrypted_data = mb_substr($decoded_data, 16, null);
return openssl_decrypt($encrypted_data, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $iv);
}
当我在我的应用中使用它们时,这些功能就像一个魅力,没有任何警告/通知/错误。
我有2个关于PHPUnit测试的问题:
1)哪种单元测试最佳方式?因为目前我只是使用反射类来设置公共函数并在同一测试函数中测试加密和解密(断言解密值等于起始值)。我怎么能单独测试加密和解密,我认为它应该是?
2)我的单元测试失败了:openssl_decrypt(): IV passed is only 5 bytes long, cipher expects an IV of precisely 16 bytes, padding with \0
这很奇怪,我在加密和解密函数中检查了IV的大小并且总是16(使用strlen()应该返回大小的字节)。
有人可以帮忙吗?谢谢!