【发布时间】:2017-12-29 05:32:43
【问题描述】:
我正在一个项目中使用密码学,我需要一些关于如何使用 openssl_encrypt 和 openssl_decrypt 的帮助,我只想知道最基本和正确的方法。这是我到目前为止得到的:
// To encrypt a string
$dataToEncrypt = 'Hello World';
$cypherMethod = 'AES-256-CBC';
$key = random_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cypherMethod));
$encryptedData = openssl_encrypt($dataToEncrypt, $cypherMethod, $key, $options=0, $iv);
然后我存储$cypherMethod、$key 和$iv 以在解密$encryptedData 时使用。 (我们不要详细说明我是如何存储这些值的,谢谢!)
// To decrypt an encrypted string
$decryptedData = openssl_decrypt($encryptedData, $cypherMethod, $key, $options=0, $iv);
首先,上面的示例代码是如何使用php openssl_encrypt的正确示例吗?
其次,我生成$key 和$iv 的方法是否正确且安全?因为我一直在阅读,所以密钥应该是加密安全的。
最后,AES-256-CBC 不需要 32-byte 值吗?如果是,那么为什么 openssl_cipher_iv_length() 只返回 int(16) 作为长度?不应该是int(32)吗?
【问题讨论】:
-
先生,我也在研究密码学,您能否详细说明如何将您的值存储在数据库(mySql)中,哪些字段类型是合适的以及您以哪种格式执行此操作。我可以成功加密文本并存储值以供以后解密,但 openss_decrypt() 方法返回 null(我认为存储数据有问题)。任何帮助将不胜感激
标签: php encryption cryptography aes php-openssl