一.单项散列加密(不可逆加密)
属于摘要算法,不是一种加密算法,作用是把任意长的输入字符串变化成固定长的输出串的一种函数
1)MD5
用法:md5(string,boolean)
string(必填):待加密字符串
boolean(可选):true代表生成原始16字符二进制格式,false代表生成32字符16进制格式,缺省为false
@return:成功返回字符串加密结果,失败返回false
不可逆算法,但可通过枚举,碰撞,收集等达到解密的效果;所以我们一般可通过双重MD5加密,或结合Sha1,Crypt等来增加解密难度
2)Crypt
用法:crypt(string.salt)
string(必填):待加密字符串
salt(选填):盐值,用于增加被编码的字符串,使编码更加安全;缺省后,会php回随机生成盐值(所以当盐值为空时,相同原文加密后的值是不一样的,因为盐值随机)
@return:返回加密后的字符串或一个少于 13 字符的字符串,从而保证在失败时与盐值区分开来。
3)Sha1
用法:sha1(string,bollean);
string(必填):待加密字符串
boolean(可选):true代表生成原始20字符二进制格式,false代表生成40字符16进制格式,缺省为false
@return:成功返回字符串加密结果,失败返回false
我们可使用如md5(sha1($str))等加密算法来提高数据安全性
二.非对称加密
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,其中最常见的事RSA算法
1)RSA
非对称加密使用不同的密钥分别进行加密和解密,简单的说就是公钥加密私钥解密,反之私钥加密公钥解密。所以首先需要生成RSA密钥串。
1.生成RSA密钥串 ( openssl或者利用支付宝开发文档的一个RSA密钥生成器,推荐使用前者)
首先确保系统安装了openssl,没有则安装:yum install -y openssl openssl devel
生成1024位的RSA私钥:openssl genrsa -out rsa_private_key.pem 1024 执行命令后会看到有rsa_private_key.pem文件存在
通过rsa_private_key.pem私钥生成公钥:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 执行命令后会看到有rsa_public_key.pem文件存在
2.得到公、私钥
先通过file_get_contents()拿到密钥内容,再用openssl_pkey_get_private ,openssl_pkey_get_public 可以分别从文件内容中得到私钥、公钥。
3.加密
一般私钥加密:
openssl_private_encrypt($str,$encrypted,$private_key);$encrypted为加密后密文
少数公钥加密:
openssl_public_encrypt($str,$encrypted,$public_key);$encrypted为加密后密文4.解密
上述私钥加密的需公钥解密openssl_public_decrypt($data,$decrypted,$public_key);$decrypted为解密后原文反之公钥加密的需私钥解密openssl_private_decrypt($data,$decrypted,$private_key);$decrypted为解密后原文