• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    php的RSA加密解密算法原理与用法分析

    本文实例讲述了php的RSA加密解密算法原理与用法。分享给大家供大家参考,具体如下:

    最近因为工作的需要,要倒腾支付宝支付相关的知识,因为支付宝应用了RSA加密机制,个人对此并不了解,所以在这里写下一篇总结。

    1、生成公钥和私钥

    要应用RSA算法,必须先生成公钥和私钥,公钥和私钥的生成可以借助openssl工具。

    本次测验是在windows下进行的,可以到以下的地址下载windows安装包:http://gnuwin32.sourceforge.net/packages/openssl.htm,安装过程不再赘述。

    安装过后,进入到安装目录的bin目录下,执行如下命令:

    openssl.exe     // 进入OpenSSL程序
    genrsa -out rsa_private_key.pem 1024 //生成私钥,执行成功后可以在当前目录下看到生成了rsa_private_key.pem文件
    pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt  //如果你使用的java,需要将私钥转换成PKCS8格式
    rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem //生成公钥,执行成功后可以在当前目录下看到生成rsa_public_key.pem文件
    
    

    公钥rsa_public_key.pem的内容:

    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc5nSC6mHl9bmM6L8n7Sq1+Ft6
    VF8LcU3jst8RIy7WqXXd5XZomc0cJLxVz3Vc0vgUKKJyP6q2ozDOCFgCp7Q9InFg
    ngtNVLEJ1+Nm0+snUDbYbnrfW8wwSPG0jPQ73CgMxOdv+IGhir6mEITbdEh+ZsVc
    GRd0OvKYIg+Itgk3/QIDAQAB
    -----END PUBLIC KEY-----

    私钥rsa_private_key.pem的内容:

    -----BEGIN RSA PRIVATE KEY-----
    MIICXAIBAAKBgQDD4KA0yU7EG7ZA32OAVDHlwXf9LYywXGn7Ma9LffnFL57cpYoQ
    Wf0Oz8FE9/UnjFOeHs2XjDrhe+uqVtYX/9Vi/znJgP9D7hpTo2NJHM/AUykD+itl
    cie2Tu+sjJQi0JFVcpc3D0ooTBhng35406CucRaOn/a52mxQnGtA4AmsSwIDAQAB
    AoGAG25nwTy39SrUWT1vl9cyrbRsc15fp4sppG4O2Imp4v2KR+g+749KqzpZHKmF
    AabbRveVXzXaQR2zoUVL8kx3u4hqY4M/S1AcOxNPIJKB703XxA1yf2Ta2CvLsWTm
    tsDWRW1WudF18yOZf3q7aoyMhpBUMlmhH4mvIYWOPFj0zaECQQD4A11Q8sfpOcIK
    fMz5jJymLMZ9P8gxNbafwjxTdTXht/MUprEAePslP3AeyKBMJNYGs04/lOQzksp+
    ZG6j7/XzAkEAyi9zj8EaPlleAil8mB5wDWiibQ/Z92nMLSUmH5FoO013dvumBI8c
    CcP1/go2sj3H4RQEWycr360yTubNkkHOSQJAcRRPos3fOkZ8Y329k3Z6IgY+RfMj
    2tQLvVG5YbAKbi0J5vuNrpJ6p+QBwfdlpvIQp6NvZOwFFEK0kuZFz/dj4wJBALyc
    cZCMUoARfEpGC24ZDuzjTIqzO+G7d3Yx7pOKYRLZXHXJogEkw8I0ZXmca5PxYFIP
    C1VBgINEHedPFjy3WMkCQEh3FG0xDpUFXETct5L1whT8lsN0EK3ZmcfDePcbKuHW
    iE5pbNn7ytpVT+jiT3+FVEZVSZCiW0lDnyd86Ppos5g=
    -----END RSA PRIVATE KEY-----

    公钥和私钥生成好了之后,私钥自己保存,将公钥交给第三方即可。

    2、php的RSA加密解密

    在做加密解密之前,首先要确保php已经开启了openssl拓展,可以通过phpinfo()函数进行查看。

    通常情况下,有以下两种情形:

    ①通过公钥加密,通过私钥解密;

    ②通过私钥加密,通过公钥解密;

    支付宝的业务场景属于第二种情形:

    1. 业务方支付宝发送支付请求,将sign参数通过自己的私钥加密过后发送到支付宝的接口;
    2. 支付宝方向业务方发送支付结果,将sign参数通过自己的私钥加密过后发送到业务方的notify接口;

    下面就以支付宝的业务逻辑为例,实现以下第二种加解密:

    加密:

    $data = "我是待加密的字符串";
    echo sign($data, 'rsa_private_key.pem');
     /* 签名 */
    function sign($data, $rsaPrivateKey) {
       /* 获取私钥PEM文件内容,$rsaPrivateKey是指向私钥PEM文件的路径 */
       $priKey = file_get_contents($rsaPrivateKey);
       /* 从PEM文件中提取私钥 */
       $res = openssl_get_privatekey($priKey);
       /* 对数据进行签名 */
       //openssl_sign($data, $sign, $res);
       openssl_private_encrypt($data, $sign, $res);
       /* 释放资源 */
       openssl_free_key($res);
       /* 对签名进行Base64编码,变为可读的字符串 */
       $sign = base64_encode($sign);
       return $sign;
     }
    
    

    执行后得到如下字符串:

    geNTbwabOYT1l2TIkaxgxnCZDop8pynyNtMNbYATtmyyOlxgJhm363ufeHbNboIhc3Pzi7kVrWPPkFsNUiGnS4mATzAcf0woJVC+26g5j19yQqb00Fr+XVipEVyN0sn9/uhlot6m6qj7h5adaREvsY/30jTld6kDkkQF8k3Eg+Y=

    解密:

    $data = "geNTbwabOYT1l2TIkaxgxnCZDop8pynyNtMNbYATtmyyOlxgJhm363ufeHbNboIhc3Pzi7kVrWPPkFsNUiGnS4mATzAcf0woJVC+26g5j19yQqb00Fr+XVipEVyN0sn9/uhlot6m6qj7h5adaREvsY/30jTld6kDkkQF8k3Eg+Y=";
    echo decrypt($data, 'rsa_public_key.pem');
    function decrypt($data, $rsaPublicKey) {
       /* 获取公钥PEM文件内容,$rsaPublicKey是指向公钥PEM文件的路径 */
       $pubKey = file_get_contents($rsaPublicKey);
       /* 从PEM文件中提取公钥 */
       $res = openssl_get_publickey($pubKey);
       /* 对数据进行解密 */
       openssl_public_decrypt(base64_decode($data), $decrypted, $res);
       /* 释放资源 */
       openssl_free_key($res);
       return $decrypted;
     }
    
    

    第一种情形与第二种情形类似,在此不在赘述。

    注:支付宝使用的加密函数是openssl_sign,之后的校验可以使用openssl_verify函数进行校验。

    PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

    在线RSA加密/解密工具:
    http://tools.jb51.net/password/rsa_encode

    文字在线加密解密工具(包含AES、DES、RC4等):
    http://tools.jb51.net/password/txt_encode

    在线散列/哈希算法加密工具:
    http://tools.jb51.net/password/hash_encrypt

    在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
    http://tools.jb51.net/password/hash_md5_sha

    在线sha1/sha224/sha256/sha384/sha512加密工具:
    http://tools.jb51.net/password/sha_encode

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • 六种php加密解密方法实例讲解
    • PHP rsa加密解密算法原理解析
    • 基于PHP实现解密或加密Cloudflar邮箱保护
    • php中加密解密DES类的简单使用方法示例
    • RSA实现JS前端加密与PHP后端解密功能示例
    • Js通过AES加密后PHP用Openssl解密的方法
    • PHP实现的AES双向加密解密功能示例【128位】
    • PHP实现的XXTEA加密解密算法示例
    • PHP实现基于3DES算法加密解密字符串示例
    • PHP实现的AES加密、解密封装类与用法示例
    • PHP实现的DES加密解密类定义与用法示例
    • 基于PHP RSA密文过长加密解密 越过1024的解决方法
    • PHP的RSA加密解密方法以及开发接口使用
    • PHP使用自定义key实现对数据加密解密的方法
    • php实现的三个常用加密解密功能函数示例
    • PHP代码加密和扩展解密实战
    上一篇:PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
    下一篇:thinkphp3.2.3框架动态切换多数据库的方法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    php的RSA加密解密算法原理与用法分析 php,的,RSA,加密解密,算法,