PHP 对称加密和非对称性加密

对称加密就是用同样的加密手段去解密.PHP中加密使用到了opensll系列函数,需要开启openssl扩展.

加密方法
function encrypt1($id)
{
$key = "1112121212121212121212";
$data['iv'] = 'fdakieli;njajdj1';
$data['value'] = openssl_encrypt($id, 'AES-256-CBC', $key, 0, $data['iv']);
$encrypt = base64_encode(json_encode($data));
return $encrypt;
}
解密方法
function decrypt2($encrypt)
{
$key = '1112121212121212121212';//解密钥匙
$encrypt = json_decode(base64_decode($encrypt), true);
#$iv = base64_decode($encrypt['iv']);
$iv = ($encrypt['iv']);
$id = openssl_decrypt($encrypt['value'], 'AES-256-CBC', $key, 0, $iv);
if ($id) {
return $id;
} else {
return 0;
}
}
非对称性加密:加密和解密用不同的秘钥.成为公钥和私钥,如果用公钥加密,那么就得用私钥解密;反过来,用私钥加密,就要用公钥解密

非对称性加密呢

$config = array(
"config" => "D:/phpStudy/PHPTutorial/Apache/conf/openssl.cnf",#这个路径是openssl.cnf文件的路径
"digest_alg" => "sha512",
"private_key_bits" => 1024,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
// Create the private and public key
$res = openssl_pkey_new($config);

// Extract the private key from $res to $privKey
openssl_pkey_export($res, $privKey, NULL, $config);
echo "Private Key: ".$privKey. '
';
// Extract the public key from $res to $pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];

$data = '我是要加密的数据';
echo "Data: ".$data. '
';
// Encrypt the data to $encrypted using the public key
openssl_public_encrypt($data, $encrypted, $pubKey);
$encrypted = base64_encode($encrypted);
echo "Encrypted:加密后的数据 ".$encrypted. '
';
// Decrypt the data using the private key and store the results in $decrypted
$encrypted = base64_decode($encrypted);
openssl_private_decrypt($encrypted, $decrypted, $privKey);

echo "Decrypted:解密后的数据 ".$decrypted. '
';
需要注意的一点是, 私钥公钥的格式要正确,

PHP 对称加密和非对称性加密_第1张图片
image.png

你可能感兴趣的:(PHP 对称加密和非对称性加密)