为了确保网络传输数据的安全性,触及敏感数据的传输,最好对数据预先加密,然后再在网络上进行传输,一起,还要确保数据在另一端是可解密的,并且还必须要经过钥匙(公钥或私钥)才干解密,没有钥匙(公钥或私钥)的人即使是拿到了加密过的数据也无法解密。
对称加密
选用单钥暗码体系的加密办法,同一个密钥能够一起用作信息的加密和解密,这种加密办法称为对称加密,也称为单密钥加密。
在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
AES加密算法
暗码学中的高档加密规范(AdvancedEncryptionStandard,AES),又称Rijndael加密法,是美国联邦政府选用的一种区块加密规范。这个规范用来替代原先的DES,现已被多方分析且广为全世界所运用。2006年,高档加密规范已然成为对称密钥加密中最盛行的算法之一。
PHP的OpenSSL扩展现已完成了AES加密算法,咱们能够经过OpenSSL扩展供给的办法完成对数据的加密和解密,PHP在7.2版别现已彻底移除了MCrypt加密,PHP手册在7.1迁移页面给出了替代计划,就是用OpenSSL取代MCrypt.
PHPAES完成
PHP完成代码:
classAES
{
//设置AES秘钥
privatestatic$aes_key=’bUYJ3nTV6VBasdJF’;//此处填写前后端共同约好的秘钥
/**
*加密
*@paramstring$str要加密的数据
*@returnbool|string加密后的数据
*/
staticpublicfunctionencrypt($str){
$data=openssl_encrypt($str,’AES-128-ECB’,self::$aes_key,OPENSSL_RAW_DATA);
$data=base64_encode($data);
return$data;
}
/**
*解密
*@paramstring$str要解密的数据
*@returnstring解密后的数据
*/
staticpublicfunctiondecrypt($str){
$decrypted=openssl_decrypt(base64_decode($str),’AES-128-ECB’,self::$aes_key,OPENSSL_RAW_DATA);
return$decrypted;
}
}
非对称加密
对称加密算法在加密和解密时运用的是同一个秘钥;而非对称加密算法需求两个密钥来进行加密和解密,这两个秘钥是公开密钥(publickey,简称公钥)和私有密钥(privatekey,简称私钥)。
在非对称加密中运用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
RSA加密算法
RSA是现在最有影响力的公钥加密算法,该算法基于一个非常简略的数论现实:将两个大素数相乘非常简单,但那时想要对其乘积进行因式分解却极其困难,因此能够将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人运用,私钥则为自己一切,供解密之用。
解密者拥有私钥,并且将由私钥核算生成的公钥发布给加密者。加密都运用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。
以甲要把信息发给乙为例,首要确认角色:甲为加密者,乙为解密者。首要由乙随机确认一个KEY,称之为密匙,将这个KEY一直保存在机器B中而不发出来;然后,由这个KEY核算出另一个KEY,称之为公匙。这个公钥的特性是几乎不可能经过它自身核算出生成它的私钥。接下来经过网络把这个公钥传给甲,甲收到公钥后,使用公钥对信息加密,并把密文经过网络发送到乙,最后乙使用已知的私钥,就对密文进行解码了。以上就是RSA算法的工作流程。
算法完成进程为:
随意选择两个大的质数p和q,p不等于q,核算N=pq。
根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。
选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
用以下这个公式核算d:d×e≡1(mod(p-1)(q-1))。
将p和q的记载销毁。
以上内容中,(N,e)是公钥,(N,d)是私钥。
生成私钥和公钥
生成私钥文件:
opensslgenrsa-outrsa_private_key.pem1024
使用私钥,生成公钥:
opensslrsa-inrsa_private_key.pem-pubout-outrsa_public_key.pem
经过生成的公钥和私钥就能够对数据进行加解密:
PHPRSA完成
PHP完成代码(公钥加密私钥解密):
classRSA
{
/**
*@paramstring$str要加密的数据
*@paramstring$public_key公钥
*@returnstring
*/
staticpublicfunctionencrypt($str,$public_key){
$encrypted=”;
$pu_key=openssl_pkey_get_public($public_key);
openssl_public_encrypt($str,$encrypted,$pu_key);//公钥加密
$encrypted=base64_encode($encrypted);
return$encrypted;
}
/**
*解密
*@paramstring$str要解密的数据
*@paramstring$private_key私钥
*@returnstring
*/
staticpublicfunctiondecrypt($str,$private_key){
$decrypted=”;
$pi_key=openssl_pkey_get_private($private_key);
openssl_private_decrypt(base64_decode($str),$decrypted,$pi_key);//私钥解密
return$decrypted;
}
}
PHP完成代码(私钥加密公钥解密):
classRSA
{
staticpublicfunctionencrypt($str,private_key){
$encrypted=”;
$pi_key=openssl_pkey_get_private($private_key);
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted=base64_encode($encrypted);
return$encrypted;
}
staticpublicfunctiondecrypt($str,$public_key){
$decrypted=”;
$pu_key=openssl_pkey_get_public($public_key);
openssl_public_decrypt(base64_decode($str),$decrypted,$pu_key);//公钥解密
return$decrypted;
}
}
php解密工具下载推荐
php解密工具下载:http://soft.5119.cn/soft/10002179.htm