zoukankan      html  css  js  c++  java
  • 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,而每次加密得到的密文长度,却恰恰是密钥的长度。所以,如果要加密较长的数据,可以采用数据截取的方法,分段加密。

  • 相关阅读:
    整理DB2左补零,右补零的方法
    DB2复制表结构及数据
    两种方式,创建有返回值的DB2函数
    IDEA中Java目录结构
    uWSGI、uwsgi、WSGI、之间的关系,为什么要用nginx加uWSGI部署。
    LeetCode_9_回文数字
    JAVA学习笔记
    学习过程中的杂记
    csrf(跨站请求伪造)
    Jquery中$(function(){})
  • 原文地址:https://www.cnblogs.com/bwteacher/p/5293395.html
Copyright © 2011-2022 走看看