程序来源是GitHub的PHP RSA 公钥私钥不对称加密。

Rsa.php程序如下:

<?php
/*** RSA 公钥 私钥加密 解密 尝试* @author wang <baobeigou.com>*/
class Rsa {private $_config;function __construct() {$rsa_config = array();require_once ('rsa.config.php');//配置文件if (empty($rsa_config['private_key']) && empty($rsa_config['public_key'])) {throw new Exception('请配置公钥或私钥参数');}$this->_config = $rsa_config;}/*** 私钥加密* @param string $data 要加密的数据* @return string 加密后的字符串*/public function privateKeyEncode($data) {$encrypted = '';$this->_needKey(2);$private_key = openssl_pkey_get_private($this->_config['private_key']);$fstr = array();$array_data = $this->_splitEncode($data);//把要加密的信息 base64 encode后 等长放入数组foreach ($array_data as $value) {//理论上是可以只加密数组中的第一个元素 其他的不加密 因为只要一个解密不出来 整体也就解密不出来 这里先全部加密openssl_private_encrypt($value, $encrypted, $private_key); //私钥加密$fstr[] = $encrypted;//对数组中每个加密}return base64_encode(serialize($fstr));//序列化后base64_encode}/*** 公钥加密* @param string $data 要加密的数据* @return string 加密后的字符串*/public function publicKeyEncode($data) {$encrypted = '';$this->_needKey(1);$public_key = openssl_pkey_get_public($this->_config['public_key']);$fstr = array();$array_data = $this->_splitEncode($data);foreach ($array_data as $value) {openssl_public_encrypt($value, $encrypted, $public_key); //私钥加密$fstr[] = $encrypted;}return base64_encode(serialize($fstr));}/*** 用公钥解密私钥加密内容* @param string $data 要解密的数据* @return string 解密后的字符串*/public function decodePrivateEncode($data) {$decrypted = '';$this->_needKey(1);$public_key = openssl_pkey_get_public($this->_config['public_key']);$array_data = $this->_toArray($data);//数据base64_decode 后 反序列化成数组$str = '';foreach ($array_data as $value){openssl_public_decrypt($value, $decrypted, $public_key); //私钥加密的内容通过公钥可用解密出来$str .= $decrypted;//对数组中的每个元素解密 并拼接}return base64_decode($str);//把拼接的数据base64_decode 解密还原}/*** 用私钥解密公钥加密内容 * @param string $data  要解密的数据* @return string 解密后的字符串*/public function decodePublicEncode($data) {$decrypted = '';$this->_needKey(2);$private_key = openssl_pkey_get_private($this->_config['private_key']);$array_data = $this->_toArray($data);$str = '';foreach ($array_data as $value){openssl_private_decrypt($value, $decrypted, $private_key); //私钥解密$str .= $decrypted;}return base64_decode($str);}/*** 检查是否 含有所需配置文件* @param int 1 公钥 2 私钥* @return int 1* @throws Exception*/private function _needKey($type) {switch ($type) {case 1:if (empty($this->_config['public_key'])) {throw new Exception('请配置公钥');}break;case 2:if (empty($this->_config['private_key'])) {throw new Exception('请配置私钥');}break;}return 1;}/*** * @param type $data* @return type*/private function _splitEncode($data) {$data = base64_encode($data); //加上base_64 encode  便于用于 分组$total_lenth = strlen($data);$per = 96;// 能整除2 和 3 RSA每次加密不能超过100个$dy = $total_lenth % $per;$total_block = $dy ? ($total_lenth / $per) : ($total_lenth / $per - 1);for ($i = 0; $i < $total_block; $i++) {$return[] = substr($data, $i * $per, $per);//把要加密的信息base64 后 按64长分组}return $return;}/***公钥加密并用 base64 serialize 过的 data* @param type $data base64 serialize 过的 data*/private  function _toArray($data){$data = base64_decode($data);$array_data = unserialize($data);if(!is_array($array_data)){throw new Exception('数据加密不符');}return $array_data;}
}

demo.php程序如下:

<?php
/*** Rsa 加密 解密 demo* @author Wang [BBG]*/
require_once 'Rsa.php';
try {$rsa = new Rsa();$str = '宝贝购 BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com BBG baobeigou.com 宝贝购BBG ';
//私钥加密$data = $rsa->privateKeyEncode($str);echo $data . '<br><br><br>';
//公钥解密$decode = $rsa->decodePrivateEncode($data);echo $decode . '<br><br><br>';
//公钥加密$pdata = $rsa->publicKeyEncode('Hello World !, 世界 你好!');echo $pdata . '<br><br><br>';
//私钥解密$pdecode = $rsa->decodePublicEncode($pdata);echo $pdecode . '<br><br><br>';} catch (Exception $exc) {echo $exc->getMessage();
}

另外一个值得参考的是GitHub的PHP-RSA。

PHP语言的RSA算法加解密程序相关推荐

  1. RSA算法加解密的C语言实现

    RSA算法加解密的C语言实现 一. 实现的功能 二. 源代码 一. 实现的功能 用户输入明文 自动随机生成较大的数p和q,并对它们进行素性检测,检测成功之后,程序继续 计算Φ(n)的值,并求出它的所有 ...

  2. RSA算法加解密过程全解析

    不同于传统的对称加密算法体系,非对称公私钥密码系统中的加密密钥和解密密钥是相互分开的,加密密钥用于公开给别人加密,而只有持有解密密钥的人才能对信息进行解密.1976年诞生过不少非对称密码算法,但是RS ...

  3. RSA算法 --- 加解密及签名

    目录 1.RSA加密 2.RSA解密 3.RSA数学基础 3.1 互质关系 3.2 欧拉函数φ(n) 3.3 欧拉定理 3.4 模反元素 4.密钥生成过程 5.RSA签名 6.测试 RSA算法是最广为 ...

  4. python语言实现rsa公钥密码算法_python 实现 rsa 算法加解密密码

    python版本:2.7 需要用到的模块:pycrypto 模块下载地址:https://pypi.org/project/pycrypto/#files 私钥和公钥的准备: 在进行RSA加密前,我们 ...

  5. RSA算法加密解密举例

    RSA算法加密解密举例 使用如下数字字母对照表: 明文M="its all greek to me" ,p=47,q=59,e=17,求出其密文以及给出RSA 算法加/解密过程.( ...

  6. C语言实现TEA系列加解密算法

    C语言实现TEA系列加解密算法 TEA加解密 XTEA加解密 XXTEA加解密 TEA加解密 #include <stdio.h> #include <stdint.h>//加 ...

  7. rsa大数加密c语言,C语言:基于OpenSSL-RSA实现RSA非对称加解密

    关于OpenSSL的介绍和安装在此不多赘述,可以在网上找到很多相关资料,各位感兴趣可以去了解下(自觉对OpenSSL开源库只是初级使用阶段,也就不在此"秀下限"了),直接进入主题, ...

  8. RSA的加解密过程--(转自CSDN,学习用)

    RSA的加解密过程  public void StartDemo()  {   //RSA的加解密过程:   //  有 rsa1 和 rsa2 两个RSA对象.   //  现在要 rsa2 发送一 ...

  9. SM2国密算法加解密

    接口安全设计原则的一个点就是数据不能明文传输,除了https这个必须的请求外,接口数据加密也是一个重要的方式,下面介绍一下SM2国密算法加解密的使用方式. 这里我就针对目前前后端分离架构的方式来简单介 ...

最新文章

  1. SQL Tuning 基础概述10
  2. JAVA 设计模式 : 状态模式
  3. SpringBoot中使用POI导出Excel时怎样循环数据库数据赋值
  4. 正则表达式的一些探索(偏JavaScript)
  5. 微型计算机中 辅助存储器通常包括,第7章 微型计算机存储器习题参考答案
  6. ibatis中iterate的用法(conjunction=or ,)
  7. pip环境变量配置 python3.6_零基础学python之爬虫第一节环境配置第一章:Python3+Pip环境配置...
  8. CSDN资源分享分红2元,哈哈
  9. 定积分证明题例题_一个广义积分不等式证明(送给数学分析同学)
  10. MBP清除NVRAM和PRAM
  11. 泰坦尼克号比赛大神级分析
  12. Guest用户如何切换到administrator用户桌面
  13. Hash表的初步认识
  14. 计算机操作系统(OS)安装机器人操作系统(ROS)实现物联网功能
  15. org.apache.thrift.transport.TTransportException: GSS initiate failed
  16. 电子计算机进行会计核算 其会计,1. 使用电子计算机进行会计核算,其软件与其生成会计 ….doc...
  17. 鸿蒙系统需要备份,华为鸿蒙系统正式发布之后,还需要面临三个问题
  18. java.sql.SQLRecoverableException: IO 错误: Undefined Error错误解决办法
  19. QXcbConnection: XCB error: 145 (Unknown), sequence: 171, resource id: 0 报错问题
  20. 前端最全面试题整理(持续更新)

热门文章

  1. StarlingMVC:为Starling量身打造的MVC框架
  2. 以修改注册表的方式避免ACK确认机制带来的延时现象
  3. Sql语句常用关键字
  4. 万维网文档在服务器端动态,信息网络应用基础作业2.docx
  5. android 分割字符 指定长度_[Android]TextUtils.ellipsize()截取指定长度字符串(附图文混排)...
  6. linux7配置永久路由,CentOS7添加永久路由
  7. 微服务笔记(二) 服务发现
  8. java数据类型单位_java的数据类型
  9. html5试卷答案,常见的HTML5前端面试题及答案
  10. 极光推送 java 绑定别名_Android 极光推送设置别名