2017-05-11 40 views
1

我搜索了如何正确使用openssl_encrypt,并发现了几个stackoverflow问题和答案。但是,恐怕我无法让它工作。openssl_encrypt不起作用,并没有提供任何错误?

我当前的代码如下所示:

$encryption_key = openssl_random_pseudo_bytes(32); 
$iv = openssl_random_pseudo_bytes(32); 
$encrypted = openssl_encrypt($data, 'AES-256-CTR', $encryption_key, 0, $iv); 
$error = openssl_error_string(); 
var_dump($encrypted, $error); 

var_dump只是给了我bool(false) bool(false)。它不起作用,我没有得到任何错误。

任何人都可以帮到我吗?

编辑:我不知道究竟是什么问题,但显然使用AES-256-CTR无法在系统上工作。使用以上代码的AES-256-CBC工作得很好...

回答

0

它不会给出错误,因为您在PHP中忘记了enable error reporting。如果你没有,你会看到:

E_WARNING:类型2 - openssl_encrypt():IV传递是长32个字节,比由选择密码预期的16更长,截断 - 在第6行

AES是一个块大小为128位或16字节的块密码。 CTR模式的随机数(这里称为初始化矢量的IV)必须至多与块大小一样长。为了获得最佳安全性,最好使用96位或12字节的随机数。剩下的32位或4字节可以填充零:

$iv = openssl_random_pseudo_bytes(12) . "\0\0\0\0"; 

如果使用CBC模式,那么你需要使用:

$iv = openssl_random_pseudo_bytes(16); 
相关问题