1. 1.生成密钥和公钥
  2.  
  3. 开始前需要准备openssl环境
  4.  
  5. linux 需要安装openssl工具包,传送门http://www.openssl.org/source/
  6.  
  7. window 下需要安装openssl的程序,传送门http://slproweb.com/products/Win32OpenSSL.html
  8.  
  9. 密钥生成
  10.  
  11. openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度,具体参数请参考文档。
  12.  
  13. openssl genrsa -out rsa_private_key.pem 1024
  14.  
  15. -out 指定生成的密钥的文件名,生成的密钥文件为 rsa_private_key.pem ,密钥长度越长越安全,但加解密所耗时间亦变长。
  16.  
  17. PHP RSA公约私钥加密解密示例
  18.  
  19. 公钥生成
  20.  
  21. Rsa命令用于处理Rsa密钥、格式转换和打印信息
  22.  
  23. openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
  24.  
  25. -in filename:输入的RSA密钥文件,在此为上面生成的密钥 rsa_private_key.pem
  26.  
  27. -pubout:设置此选项后,保存公钥值到输出文件中。
  28.  
  29. -out filename:输出文件,在此我们定义成rsa_public_key.pem
  30.  
  31. PHP RSA公约私钥加密解密示例
  32.  
  33. PHPRSA加解密
  34.  
  35. 开始之前需要准备将php.ini配置文件的;extension=php_openssl.dll 改为 extension=php_openssl.dll
  36.  
  37. <?php
  38.  
  39. $privateKeyFilePath = 'rsa_private_key.pem';
  40.  
  41. $publicKeyFilePath = 'rsa_public_key.pem';
  42.  
  43. extension_loaded('openssl') or die('php需要openssl扩展支持');
  44.  
  45. (file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('文件路径不正确');
  46.  
  47. $privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));
  48.  
  49. $publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
  50.  
  51. ($privateKey && $publicKey) or die('密钥或者公钥不可用');
  52.  
  53. // 加密数据
  54.  
  55. $originalData = '我的帐号是:toutiao,密码是:123456';
  56.  
  57. // 加密以后的数据
  58.  
  59. $encryptData = '';
  60.  
  61. echo '原数据为:', $originalData, PHP_EOL;
  62.  
  63. ///////////////////////////////用私钥加密////////////////////////
  64.  
  65. if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {
  66.  
  67. // 加密后 可以base64_encode后方便在网址中传输
  68.  
  69. echo '加密成功,加密后数据(base64_encode后)为:', base64_encode($encryptData), PHP_EOL;
  70.  
  71. } else {
  72.  
  73. exit('加密失败');
  74.  
  75. }
  76.  
  77. ///////////////////////////////用公钥解密////////////////////////
  78.  
  79. //解密以后的数据
  80.  
  81. $decryptData ='';
  82.  
  83. if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {
  84.  
  85. echo '解密成功,解密后数据为:', $decryptData, PHP_EOL;
  86.  
  87. } else {
  88.  
  89. exit('解密成功');
  90.  
  91. }

PHP RSA加密解密的更多相关文章

  1. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  2. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  3. openssl evp RSA 加密解密

    openssl evp RSA 加密解密 可以直接使用RSA.h 提供的接口 如下测试使用EVP提供的RSA接口 1. EVP提供的RSA 加密解密 主要接口: int EVP_PKEY_encryp ...

  4. C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法

    因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...

  5. Cryptopp iOS 使用 RSA加密解密和签名验证签名

    Cryptopp 是一个c++写的功能完善的密码学工具,类似于openssl 官网:https://www.cryptopp.com 以下主要演示Cryptopp 在iOS上的RSA加密解密签名与验证 ...

  6. C# Java间进行RSA加密解密交互

    原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣 ...

  7. C# Java间进行RSA加密解密交互(二)

    原文:C# Java间进行RSA加密解密交互(二) 接着前面一篇文章C# Java间进行RSA加密解密交互,继续探讨这个问题. 在前面,虽然已经实现了C# Java间进行RSA加密解密交互,但是还是与 ...

  8. C# Java间进行RSA加密解密交互(三)

    原文:C# Java间进行RSA加密解密交互(三) 接着前面一篇C# Java间进行RSA加密解密交互(二)说吧,在上篇中为了实现 /** * RSA加密 * @param text--待加密的明文 ...

  9. RSA加密解密及数字签名Java实现--转

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...

  10. RSA加密解密和读取公钥、私钥

    /// <summary>     /// RSA加密解密及RSA签名和验证    /// </summary>     public class RSADE    {    ...

随机推荐

  1. linux c++ 多线程心得

    好久没写多线程了,工作好几年也没怎么大规模的写过多线程,都是成形的架构里写业务逻辑.偶尔自己写了下,各种踩坑... 1.string 不是线程安全的 一个特例是std::string.在一些STL的实 ...

  2. (转)读懂diff

    http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异, ...

  3. log4j的使用配置

    1.与spring整合,web.xml中配置详情 <!-- 加载log4j的配置文件log4j.properties --> <context-param> <param ...

  4. 加密shell

    shc -v -r -T -f script-name >/dev/null 2>&1

  5. ssm异常;

    问题:Invalid bound statement (not found): com.itq.mapper.TbItemMapper.selectByExample 解决:修改pom.xml文件中添 ...

  6. 剑指offer第二章

    剑指offer第二章 1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含 ...

  7. Jquery 点击父类全选子类 , 子类选父类

    <p> <label style="font-size:18px;font-weight: bold;" class="checkboxs"& ...

  8. 【DUBBO】dubbo架构详解(转载)

    转载地址:http://shiyanjun.cn/archives/325.html Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解 ...

  9. groovy && java 混编 gradle 配置

    参考配置: apply plugin: "application" apply plugin: "java" apply plugin: "groov ...

  10. [转]使用tcpdump抓取HTTP包

    tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 0x4745 为"GET"前两个字母"G ...