openssl_encrypt给出不同的结果

时间:2019-05-02 11:23:59

标签: php encryption

随着GDPR的引入,建议开始加密在数据库中输入的敏感数据。我打算给自己一些经验 怀疑是否足够快,更改服务器或将php更新到更长的版本,算法是由php.net复制并被许多用户很好地引用的,如果它们已经过时并因此不再受支持?我会发现自己在数据库上拥有大量数据,而无能为力。 我当前正在使用下一个代码。

当我多次使用secure_encrypt函数时,每次都会得到不同的结果。怎么可能?

谢谢!

    <?php

public function secured_encrypt($data){
$first_key = base64_decode($this -> FIRSTKEY);
$second_key = base64_decode($this -> SECONDKEY);   

$method = "aes-256-cbc";   
$iv_length = openssl_cipher_iv_length($method);
$iv = openssl_random_pseudo_bytes($iv_length);

$first_encrypted = openssl_encrypt($data, $method,$first_key, OPENSSL_RAW_DATA ,$iv);   
$second_encrypted = hash_hmac('sha3-512', $first_encrypted, $second_key, TRUE);

$output = base64_encode($iv.$second_encrypted.$first_encrypted);   
return $output;       
}


public function secured_decrypt($input){
$first_key = base64_decode($this -> FIRSTKEY);
$second_key = base64_decode($this -> SECONDKEY);           
$mix = base64_decode($input);

$method = "aes-256-cbc";   
$iv_length = openssl_cipher_iv_length($method);

$iv = substr($mix,0,$iv_length);
$second_encrypted = substr($mix,$iv_length,64);
$first_encrypted = substr($mix,$iv_length+64);

$data = openssl_decrypt($first_encrypted,$method, $first_key,OPENSSL_RAW_DATA, $iv);
$second_encrypted_new = hash_hmac('sha3-512', $first_encrypted, $second_key, TRUE);

if (hash_equals($second_encrypted,$second_encrypted_new))
return $data;

return false;
}  
?>

1 个答案:

答案 0 :(得分:1)

您正在使用openssl_random_pseudo_bytes

设置初始化向量