我正在做一个涉及密码学的项目,需要一些关于如何使用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字节
的值吗?如果是,那么为什么openssl_cipher_iv_length()
返回的长度只有int(16)
?难道它不应该是int(32)
吗?