php-encrypt比较两个数据

时间:2018-05-07 09:43:49

标签: php encryption

我仍然是新手和新编码器加密php中的数据,我在数据库中使用iv加密数据现在的问题是,当用户尝试搜索该数据时我会比较数据他以类似WHERE tbl_column = "user_input"的sql类型输入数据库数据。有没有更好的方法来比较两个数据(普通数据检查到加密数据)这里是我的代码。

<?php
$input = 'sample';

$key = "secretkey";
$secretMethod = 'AES-256-CBC';
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

echo $database_data = openssl_encrypt('sample', $secretMethod, $key, 0, $iv);

echo $data = $iv.$emessage;

$iv = substr($data, 0, $iv_size);

echo '<br/>Decrypted: '.openssl_decrypt(substr($data, $iv_size), $umethod, $key, 0, $iv);

if($data == $input) {
    echo 'equal';
} else {
    echo 'not-equal';
}

?>

1 个答案:

答案 0 :(得分:0)

我正在使用此解决方案进行加密/解密 1-加密:

function crypt_val($val){
      $token = $val;
      $enc_method = 'AES-128-CTR';
      $enc_key = openssl_digest(gethostname() . "|" . $key, 'SHA256', true);
      $enc_iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($enc_method));
      $crypted_token = openssl_encrypt($token, $enc_method, $enc_key, 0, $enc_iv) . "::" . bin2hex($enc_iv);
      return $crypted_token;
    } 

2-解密:

function decrypt_val($val){
      $crypted_token = $val;
      if(preg_match("/^(.*)::(.*)$/", $crypted_token, $regs)) {
      list(, $crypted_token, $enc_iv) = $regs;
      $enc_method = 'AES-128-CTR';
      $enc_key = openssl_digest(gethostname() . "|" . $key, 'SHA256', true);
      $decrypted_token = openssl_decrypt($crypted_token, $enc_method, $enc_key, 0, hex2bin($enc_iv));
      return $decrypted_token;
    }
  }

第一个函数将加密输入的字符串,第二个函数将解密它 请注意, $ key 是您的密钥,它将用于加密/解密过程