• php中rsa加密解密验证


    RSA非对称加密,对敏感的数据传输进行数据加密、验证等。
    测试环境:wamp、aliyun虚拟主机(lamp)
    一、加密解密的第一步是生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)。下载生成公钥、私钥工具openssl。
      1、openssl genrsa -out rsa_private_key.pem 1024

      2、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
      3、openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
      第1条命令生成原始 RSA私钥文件 rsa_private_key.pem,第2条命令将原始 RSA私钥转换为 pkcs8格式,第3条生成RSA公钥 rsa_public_key.pem
    从上面看出通过私钥能生成对应的公钥,因此我们将私钥private_key.pem用在服务器端,公钥发放给android跟ios等前端。
      注:和支付宝用到的公钥有区别,支付宝的不改成pkcs8格式(php环境时)。

    二、php中用生成的公钥、私钥进行加密解密。也可直接证书取文件内容。

      $pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
      $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
      $data = "aassssasssddd";//原始数据
      $encrypted = ""; //加密后
      $decrypted = "";//解密后
      openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
      $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
      openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来

      openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
      $encrypted = base64_encode($encrypted);
      openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密

      注:RSA加密算法有长度限制,每次加密的字节数,不能超过密钥的长度值减去11,而每次加密得到的密文长度,却恰恰是密钥的长度。所以,如果要加密较长的数据,可以采用数据截取的方法,分段加密。

  • 相关阅读:
    PHP面向对象——三大基本特性与五大基本原则
    PHP面向对象——GD库实现图片水印和缩略图
    php系统函数-----数组函数
    PHP面向对象(OOP)----分页类
    郑军学长-解决SVN访问慢[密]
    如何减少换页错误?
    什么是正则表达式?
    MFC通过ADO操作Access数据库(详细)
    xml 转义特殊字符 如&'"
    MFC操作串口,详细
  • 原文地址:https://www.cnblogs.com/bwteacher/p/5293395.html
Copyright © 2020-2023  润新知