RSA 非对称加密
非对称加密很安全,但是非常慢,所以我们一般用对称加密来加密传递消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去
非对称加密有公私钥组成,其中私钥要有一方保管不能外泄,而公钥可以任何请求它的人,双方交互,相互交换公钥,用自己的私钥进行签名,那么只要有我方的公钥就可以验签成功,用对方的公钥进行加密,那么只有持有对应的私钥才可以解密,能最大限度的保证安全
AES对称加密
最快速 最简单的一种加密方式,加密和解密用的是同样的秘钥,这种方法在密码学中叫做对称加密算法
对称加密通常使用相对较小的秘钥,一般小于256bit,因为秘钥越大,加密于越强,但加密与解密的过程越慢
对称加密的一大缺点是秘钥的管理和与分配,换句话说,如何把秘钥发送到要解密你消息的人的手里是一个问题;现实中通常的做法是将对称加密的秘钥进行非对称加密,然后传送给需要它的人
openssl (openssl secure sockets layer) 开放式安全套接层协议
PHP中支持openssl扩展,可以用来对数据进行加密
非对称加密函数:
openssl_encrypt(string $data, string $method, string $key[, int options = 0[,string $iv]]) 加密数据
openssl_decrypt() 解密数据 // 参数同上
参数解释:
data 待加密的数据
method 加密算法, AES-128-CBC AES-256-CBC.....
key 加密的秘钥,秘钥长度是method使用的位数 / 8
options
是以下标记的按位或: OPENSSL_RAW_DATA
、 OPENSSL_ZERO_PADDING
。
iv 非null初始化向量,长度小于等于method使用的位数 / 8
返回值: 成功返回二进制的字符串,可以使用base64_encode进行转化
注意:
加解密使用的iv必须一致
对称加密:
openssl_private_encrypt(string $data, string &$decrypted, mixed $key [, int $padding = OPENSSL_OKCS1_PADDING]) 使用私钥加密
openssl_private_decrypt() 使用私钥解密
openssl_public_encrypt() 使用公钥加密
openssl_public_decrypt() 使用公钥解密
参数说明:
data 需要加密/解密的数据
decrypted 这将保存加密/解密的结果
key 公钥/私钥,必须是和用来加密/解密所用的公私钥对应的公私钥
padding 可以是一些常量值