创建时间:2017-08-01
PHP 异或加解密,将字符串进行跟指定秘钥进行位移运算
加密字符串
$key = md5('chenguangan');//秘钥
$data = $arr['pass']^$key;//需要加密的原始数据异或秘钥得到加密后的数据解密字符串
$key = md5('chenguangan');//秘钥
//将加密后的数据$data跟秘钥进行异或位移运算得到原始数据
$str = $data^$key;PHP RSA加解密实例,加密字符串入库,然后查找数据库,将数据解密
PHP服务端与客户端交互、提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了
加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)
linux新建文件夹 mkdir xxx
cd进入 xxx文件夹
在当前文件夹下面运行运行下面代码
openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
运行之后,会在当前目录下面生成三个文件
第一条命令生成原始 RSA私钥文件 rsa_private_key.pem
第二条命令将原始 RSA私钥转换为 pkcs8格式
第三条生成RSA公钥 rsa_public_key.pem
从上面看出通过私钥能生成对应的公钥,因此我们将私钥private_key.pem用在服务器端,公钥发放给Android跟iOS等前端
RSA加密语法
将私钥文件内容private_key.pem 装到变量 $private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC8RnOWQ+tyztAd7yRaHPKnud0SZfikoz44nrmcv0RNXzjCZvvs
eAbHfa9geexYxs8k5/2OMKuw+z/aD5fktJ5RsjFBnB7jFhcbq/OqtzscjvM6uVRs
doh7vTnF393qf6d3VvPKW0Yju+QjlX2v+uRk3p+Ed6r7RiMdVcN9zmklsQIDAQAB
AoGAcVLaiezR0GXpYMsrj03zRL+b8FIOalKTxhLL2CxMGWIiUOkZ48iPFA5zvFdG
ylzIHAfDV422Gi3wzfkqzQ9mZu7bTZcnH/1upV5TYZ/1uI2N0VPpnj3kboB3f7ea
HhQ+2L6PFbKIQd10oR0CQQDfWQXhWu03yYdgS3N7UTBQZCIzz2ahMGa41BhxQgyu
ZbXDkHqH/qEFqlPL9Wmb82zJC2cL+LFix2r8Gi1YPIki
-----END RSA PRIVATE KEY-----';
$pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$data = $arr['pass'];//需要加密的原始数据
$encrypted = "";//用来装加密后的数据
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密(加密内容,加密之后存放的变量,私钥)
$passData = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的,得到加密后的字符串 $passData $public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8RnOWQ+tyztAd7yRaHPKnud0S
Zfikoz44nrmcv0RNXzjCZvvseAbHfa9geexYxs8k5/2OMKuw+z/aD5fktJ5RsjFB
nB7jFhcbq/OqtzscjvM6uVRsdoh7vTnF393qf6d3VvPKW0Yju+QjlX2v+uRk3p+E
d6r7RiMdVcN9zmklsQIDAQAB
-----END PUBLIC KEY-----';
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
$arr = Db::query("select * from {$this->tb}");
$data = '';//用来装加密后的数据
for($i=0;$i<count($arr);$i++){
openssl_public_decrypt(base64_decode($arr[$i]['pass']),$data,$pu_key);//私钥加密的内容通过公钥可用解密出来
$arr[$i]['pass'] = $data;//将加密后的数据返回到原来的数组里面
}
return $arr;上一篇:CSS阻止页面双击选中文本
下一篇:linux设置定时任务