Chinaunix首页 | 论坛 | 博客
  • 博客访问: 908996
  • 博文数量: 91
  • 博客积分: 803
  • 博客等级: 准尉
  • 技术积分: 1051
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 13:42
文章分类

全部博文(91)

文章存档

2021年(1)

2020年(4)

2019年(4)

2018年(9)

2017年(11)

2016年(11)

2015年(6)

2014年(3)

2013年(28)

2012年(14)

分类: 网络与安全

2015-02-26 14:47:57

php服务端与客户端交互、提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密


1、加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:

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等前端


2、php中用生成的公钥、私钥进行加密解密,直接上代码


点击(此处)折叠或打开

  1. $private_key = file_get_contents("private_key.pem");
  2. $public_key = file_get_contents("public_key.pem");
  3. $pi_key = openssl_pkey_get_private($private_key);
  4. $pu_key = openssl_pkey_get_public($public_key);
  5. $data = 'aassssasssd3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333dd';//原始数据
  6. $encrypted = "";
  7. $decrypted = "";
  8. openssl_private_encrypt($data,$encrypted,$pi_key); //私钥加密
  9. $encrypted = base64_encode($encrypted);
  10. echo "加密后内容{$encrypted}";
  11. openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);
  12. echo "解密后的内容".$decrypted

sha256withrsa签名

点击(此处)折叠或打开

  1. //create signature
  2. $src = "asdfsadfdd3333";
  3. openssl_sign($src, $signature, $private_key, OPENSSL_ALGO_SHA256);
  4. echo "原始数据{$src}";
  5. echo $signature;
  6. $r = openssl_verify($src, $signature, $public_key, "sha256WithRSAEncryption");
  7. var_dump($r)


阅读(1688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~