使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密。

1.安装openssl和php的openssl扩展

2.生成私钥:openssl genrsa 用于生成rsa私钥,生成时可以指定私钥长度和密码保护

  1. openssl genrsa -out rsa_private_key.pem 1024

3.生成公钥:rsa命令用于处理RSA密钥、格式转换和打印信息

  1. openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

4.这里我们使用私钥加密,公钥解密

  1. <?php
  2. /**
  3. * 私钥文件的路径
  4. */
  5. $privateKeyFilePath = 'rsa_private_key.pem';
  6. /**
  7. * 公钥文件的路径
  8. */
  9. $publicKeyFilePath = 'rsa_public_key.pem';
  10. extension_loaded('openssl') or die('php需要openssl扩展支持');
  11. (file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('私钥或者公钥的文件路径不正确');
  12. /**
  13. * 生成Resource类型的私钥,如果私钥文件内容被破坏,openssl_pkey_get_private函数返回false
  14. */
  15. $privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));
  16. /**
  17. * 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false
  18. */
  19. $publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
  20. ($privateKey && $publicKey) or die('私钥或者公钥不可用');
  21. /**
  22. * 原数据
  23. */
  24. $originalData = '加密前hahahaha';
  25. /**
  26. * 加密以后的数据,用于在网络上传输
  27. */
  28. $encryptData = '';
  29. echo '原数据为:', $originalData, PHP_EOL;
  30. //////////////////////////////////用私钥加密/////////////////////////////////
  31. if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {
  32. /**
  33. * 加密后 可以base64_encode后方便在网址中传输 或者打印 否则打印为乱码
  34. */
  35. echo '加密成功, 加密后数据(base64_encode后)为:', base64_encode($encryptData), PHP_EOL;
  36. } else {
  37. die('加密失败');
  38. }
  39. /**
  40. * 解密以后的数据
  41. */
  42. $decryptData = '';
  43. //////////////////////////////////用公钥解密/////////////////////////////////
  44. if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {
  45. echo '解密成功,解密后数据为:', $decryptData, PHP_EOL;
  46. } else {
  47. die('解密失败');
  48. }

PHP基于openssl实现的非对称加密操作的更多相关文章

  1. [Linux] 使用openssl实现RSA非对称加密

    简单定义:公钥和私钥,加密和解密使用的是两个不同的密钥,所以是非对称 系统:ubuntu 14.04 软件:openssl java php 生成公钥私钥 使用命令生成私钥: openssl genr ...

  2. 使用openssl实现RSA非对称加密

    生成公钥私钥 使用命令生成私钥 openssl genrsa - 参数:genrsa 生成密钥   -out 输出到文件  rsa_private_key.pem 文件名  1024 长度 从私钥中提 ...

  3. PHP的OpenSSL加密扩展学习(二):非对称加密

    上篇文章,我们了解了关于对称和非对称加密的一些相关的理论知识,也学习了使用 OpenSSL 来进行对称加密的操作.今天,我们就更进一步,学习 OpenSSL 中的非对称加密是如何实现的. 生成私钥 通 ...

  4. openssl 非对称加密DSA,RSA区别与使用介绍(转)

    openssl 非对称加密DSA,RSA区别与使用介绍(转) 博客分类: OS.Linux Security   在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多 ...

  5. RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密

    最近换了一份工作,工作了大概一个多月了吧.差不多得有两个月没有更新博客了吧.在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用.哈哈 说说文章标题的相关的 ...

  6. OpenSSL - RSA非对称加密实现

    非对称加密:即两端使用一对不同的密钥进行加密. 在非对称加密中,需要两对密钥,公钥和私钥. 公钥个私钥属于对立关系,一把加密后,只有另一把才可以进行解密. 公钥数据加密 数字证书内包含了公钥,在进行会 ...

  7. java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS

    概述 java-信息安全(一)-BASE64,MD5,SHA,HMAC java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4 java-信息安全(四)-数据 ...

  8. openssl rsautl和openssl pkeyutl(文件的非对称加密)

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成 ...

  9. 基于OpenSSL的RSA加密应用(非算法)

    基于OpenSSL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...

随机推荐

  1. 同步+TASK异步请求

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. jQuery链式编程时修复断开的链

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Leetcode93. Restore IP Addresses复原IP地址

    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...

  4. JZOJ[3771] 【NOI2015模拟8.15】小 Z 的烦恼

    题目 描述 题目大意 有从111到nnn的数字,每个数字都可以放在一个盒子里(可以不放).一旦放,满足: 如果它不在第mmm个盒子,那么它的两倍一定在后面一个盒子里. 如果它不在第111个盒子,那么它 ...

  5. 【JZOJ3317】管道

    description Hotham市再次被Jester袭击.这一次,Jester攻击的目标是Hotham的供水系统.Hotham的淡水存储在N个水库,由M个管道连接. 任意2个水库之间至少有一条路径 ...

  6. php中$_REQUEST、 $_GET、 $_POST、 $_COOKIE 的关系和区别

    看到REQUEST可以通吃GET .POST .COOKIE 后 感觉这个$_REQUEST太强大了是不是其他的几个超级变量就没有用了,下面对他们整体做个比较: 1.安全性 post>get 2 ...

  7. Vue.js项目部署到服务器

    1.申请服务器 2.配置Xshell 3.在服务器手动建自己的根目录,把根目录的文件名复制给项目里面config下面的index.js 4.项目开始打包 npm run build 5.打包完成之后把 ...

  8. php数据结构课程---5、树(树的 存储方式 有哪些)

    php数据结构课程---5.树(树的 存储方式 有哪些) 一.总结 一句话总结: 双亲表示法:data parent:$tree[1] = ["B",0]; 孩子表示法:data ...

  9. spring boot 监听容器启动

    /** * 在容器启动的时候 加载没问完成的消息重发 * @author zhangyukun * */ @Component @Slf4j public class LoadMessageListe ...

  10. 2006-2007 ACM-ICPC | POJ3380 POJ3384 POJ3385 水题题解

    // CF比赛链接:http://codeforces.com/gym/101650 // POJ链接:http://poj.org/searchproblem?field=source&ke ...