我从事一些加密方面的工作。
- 我在 CBC 模式下使用 AES 256
- 我使用 OPENSSL
我知道以下事情(来源 = 维基百科):
一个初始化向量应该是:
- 唯一性:对于使用给定 key 加密的任何消息,不得重复
- 不可预测:观察到任意数量的消息及其 IV 的攻击者应该没有信息来预测下一个成功概率大于 50%/bit 的消息(即与随机无法区分)
我的问题是,如何使用 OPENSSL 和 PHP 安全地生成 IV?我知道 lib mcrypt ( https://php.net/manual/en/function.mcrypt-create-iv.php ) 中有这样的功能
我没有找到任何可以使用 OPENSSL 执行此操作的东西(生成独特且不可预测的 IV)。
最佳答案
使用openssl_random_pseudo_bytes
(最好将第二个参数设置为现有变量,然后您应该测试它是否设置为 TRUE
)。这将生成具有适当随机特性的 IV。
$wasItSecure = false;
$iv = openssl_random_pseudo_bytes(16, $wasItSecure);
if ($wasItSecure) {
// We're good to go!
} else {
// Insecure result. Fail closed, do not proceed.
}
或者,PHP 7 提供 random_bytes()
这要简单得多。
关于php - 如何安全地为 AES CBC 加密生成 IV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7280769/