使用mySQL进行PHP加密和解密

时间:2014-11-03 09:58:09

标签: php mysql encryption

使用PHP加密mySQL中的信息时遇到问题。我正在使用下面的示例,最后我可以加密内容,但当我在其他页面解密时,会显示一些奇怪的单词。

请帮忙

我正在使用以下功能加密

<?php
header("Content-Type:text/html; charset=utf-8");

$key = md5('test');

function encrypt($string, $key) {
     $string = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$string,MCRYPT_MODE_ECB)));
     return $string;
}

//connection
....
//connection

mysqli_set_charset($con, 'utf8');

if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$name = mysqli_real_escape_string($con,$_POST['name']);

$sql="INSERT INTO db (name) VALUES ('".encrypt($name,$key)."')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
?>

并使用以下功能解密

<?php
header("Content-Type:text/html; charset=utf-8");

$key = md5('test');

function decrypt($string, $key) {
     $string = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,base64_encode($string),MCRYPT_MODE_ECB));
     return $string;
}

//connection
....
//connection

mysqli_set_charset($con, 'utf8');

if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

        $query = "SELECT * FROM db";
        $result = mysqli_query($con, $query);

        while($row = mysqli_fetch_array($result)) { 
            echo $row['name'] ;
            echo decrypt($row['name'],$key) ;
        }


?>

输入:TEST

解密的结果:

K704rW4crOuvpDZe/yZ2ums0btlo8hvpeyJr91V+Ycg=�x�_L��kR�^О�dMFH��7*�%Ίֶ���M_<��w���W�^ ��3M�"��Rk�

1 个答案:

答案 0 :(得分:0)

这是一个加密和解密字符串的函数:

function encrypt_decrypt($action, $string) {
$output = false;

$encrypt_method = "AES-256-CBC";
$secret_key = 'This is my secret key';
$secret_iv = 'This is my secret iv';

// hash
$key = hash('sha256', $secret_key);

// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
$iv = substr(hash('sha256', $secret_iv), 0, 16);

if( $action == 'encrypt' ) {
    $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
    $output = base64_encode($output);
}
else if( $action == 'decrypt' ){
    $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
}

return $output;
}

你这样称呼它:

如果要加密,只需将其传递给第一个参数,第二个参数中的字符串如下:

$encryptedString = encrypt_decrypt('encrypt', 'test');

并解密:

$decrypte = encrypt_decrypt('decrypt', $encryptedString);