对称加密算法是在加密和解密时使用同一个密钥。与对称加密算法不同,非对称加密算法需要两个密钥--公开密钥(public key)和私有密钥(private key)进行加密和解密。
公钥和密钥是一对,如果公开密钥对数据进行加密,只有对应私有密钥才能解密;如果用私有密钥对数据加密,那么只有对应公有密钥才能解密。
常用算法:RSA、Elgamal、揹包算法、Rabin、ECC等。RSA是最有影响力的公钥加密算法之一。
生成公密钥:
# 生成私钥 openssl genrsa -out rsa_private_key.pem 1024 # 生成公钥 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
在PHP中用RSA进行加密解密如下:
<?php $private_key_file = "rsa_private_key.pem"; $public_key_file = "rsa_public_key.pem"; $data = "hello world"; if (file_exists($private_key_file)) { $private_key = file_get_contents($private_key_file); } else { die("private key not exists"); } if (file_exists($public_key_file)) { $public_key = file_get_contents($public_key_file); } else { die("public key not exists"); } $encrypted = $decrypted = ""; openssl_private_encrypt($data, $encrypted, $private_key); // 使用私钥加密数据 openssl_public_decrypt($encrypted, $decrypted, $public_key); echo $decrypted; $encrypted = $decrypted = ""; openssl_public_decrypt($data, $encrypted, $public_key); openssl_private_encrypt($data, $decrypted, $private_key); // 使用私钥进行加密 echo $decrypted;