我想在CBC模式下使用AES-256使用对称密钥编码加密某些数据。我在网上看到了不同的实现,哪种方式最好(如果有的话)生成一个合适的IV?
方法1:
$secret_iv = 'This is my secret iv';
$iv = substr(hash('sha256', $secret_iv), 0, 16);
IV只是通过一些输入用sha256生成(我知道最好为每个加密数据使用不同的IV,所以我生成一些随机的东西作为sha265哈希的种子)。 IV然后被截断到16的长度,因为那是AES-256-CBC所期待的。
方法2:
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
openssl_random_pseudo_bytes
生成一些长度为16的二进制输出。
使用经典字符串或二进制字符串作为IV?
是否有任何显着差异答案 0 :(得分:2)
IV由字节组成。
这些字节是否可以表示为字符串无关紧要。
为了提高安全性,您应该生成随机IV。
实际上,给定加密密钥,如果随机选择IV,并且如果两次加密相同的纯文本,则不会产生相同的密文。
所以你应该更喜欢你的例子中的方法2。