最近学了RSA加密解密算法 根据流程写了一个能够进行完整的加密解密算法

<?php
error_reporting(E_ALL & ~E_NOTICE);
ini_set("max_execution_time", 18000);
set_time_limit(0);
//随机两个数
function creat_random_prime_number()
{$random = array();//$a = rand(1000, 10000);//$a =  rand(10, 100);$a = rand(3, 3);//$a = rand(2, 3);//$a = rand(2, 2);for ($i = 1; $i < $a; $i++) {$random[$i] .= rand(0, 9);}$random[0] = rand(1, 9);return $random;
}
//计算存到数组里的两个数的值
function cacl_long_value($len, $random)
{$value = 0;for ($i = 0; $i < $len; $i++) {$value = bcadd($value, bcmul($random[$i], bcpow(10, $len - $i - 1)));}return $value;
}
//判断是否是质数
function is_prime_number($value)
{$falg = 1;for ($i = 2; $i <= sqrt($value); $i++) {if (bcmod($value, $i) == 0) {$falg = 0;break;}}return $falg;
}
//判断E是否和L互质
function if_E($E, $L)
{$falg = 1;$min = min($E, $L);for ($i = 2; $i <= $min; $i++) {if (bcmod($E, $i) == 0 && bcmod($L, $i) == 0)$falg = 0;}return $falg;
}
//找到一个E
function creat_E($L)
{while (1) {$i = rand(2, $L);if (bcmod($L, $i) != 0) {$falg = if_E($i, $L);if ($falg == 1) {break;}continue;}}return $i;
}
//根据E计算E对L的逆
function cacl_D($E, $L)
{$c = array();$q = array();$L_old = $L;for ($i = 1;; $i++) {$c[$i] = bcmod($L, $E);$q[$i] = bcdiv(bcsub($L, $c[$i]), $E);$L = $E;$E = $c[$i];if ($c[$i] == 1)break;}$b[0] = 0;$b[1] = 1;for ($j = 2; $j < $i + 2; $j++) {$b[$j] = bcadd(bcmul(bcmul((-1), $b[$j - 1]), $q[$j - 1]), $b[$j - 2]);$D = $b[$j];}if ($D < 0)return bcadd($L_old, $D);return $D;
}
//主函数
for ($i = 0;; $i++) {$random_1 = creat_random_prime_number();$random_2 = creat_random_prime_number();$len_1 = count($random_1);$len_2 = count($random_2);$prime_value_1 = cacl_long_value($len_1, $random_1);$prime_value_2 = cacl_long_value($len_2, $random_2);$falg_1 = is_prime_number($prime_value_1);$falg_2 = is_prime_number($prime_value_2);if ($falg_1 == 1 && $falg_2 == 1 && $prime_value_1 != $prime_value_2) {break;}
}
echo "P=" . $prime_value_1;
echo "</br>";
echo "</br>";
echo "Q=" . $prime_value_2;
echo "</br>";
echo "</br>";
$N = bcmul($prime_value_1, $prime_value_2);
echo "N=" . $N;
echo "</br>";
echo "</br>";
$L = bcmul($prime_value_1 - 1, $prime_value_2 - 1);
echo "L=" . $L;
echo "</br>";
echo "</br>";
$E = creat_E($L);
echo "E=" . $E;
echo "</br>";
echo "</br>";
//此时公钥为($E,$N)
$D = cacl_D($E, $L);
echo "D=" . $D;
echo "</br>";
echo "</br>";
//此时私钥为($D,$N)
$mingwen = rand(1, $N);
echo "明文=" . $mingwen;
echo "</br>";
echo "</br>";
$miwen = bcmod(bcpow($mingwen, $E), $N);
echo "密文=" . $miwen;
echo "</br>";
echo "</br>";
$new_mingwen = bcmod(bcpow($miwen, $D), $N);
echo "解密=" . $new_mingwen;

写的不好,多多谅解~

PHP实现的RSA加密解密相关推荐

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

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

  2. ios php rsa加密解密,php rsa加密解密使用详解

    第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...

  3. genrsa out php,PHP进行RSA加密解密

    最近在着手写一个服务端安全接口规范,需要用到RSA加密解密.所以小试牛刀一下,并且做个记录. 环境: Win7 64位 PHP 5.6.12 需要原型工具: 一.安装OpenSSL 随意安装到哪里 二 ...

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

    C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...

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

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

  6. [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)

    常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...

  7. Java使用RSA加密解密签名及校验

    RSA加密解密类: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; i ...

  8. python实现rsa加密源代码_python实现RSA加密(解密)算法

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...

  9. python下RSA加密解密以及跨平台问题

    项目合作需要,和其他网站通信,消息内容采用RSA加密方式传递.之前没有接触过RSA,于是两个问题出现了: 声明: 环境WIN 7 + python 2.6.6 RSA格式:PEM 一.Python下R ...

  10. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出

    差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...

最新文章

  1. netapp更换硬盘
  2. mysql常用语句整理
  3. 20181210-es6(letconst解构模版字符串原理 展开运算符、剩余运算符运用 深拷贝原理 reduce原理 箭头函数)...
  4. 【Spring学习】spring定时任务的实现方式
  5. Memcache-No.03 Memcache相关安装、部署、启动、监控
  6. mysql8.0递归_mysql8.0版本递归查询
  7. 前端学习(1945)vue之电商管理系统电商系统之调用api获取数据
  8. Java依赖注入 - DI设计模式示例教程
  9. 微信公众平台开发(45)食物营养及热量查询
  10. BZOJ 2653 middle
  11. 信号与系统——初识信号的原理与分类
  12. 运维服务器环境梳理方案,运维工作梳理
  13. 如何批量重命名,文件批量重命名方法介绍
  14. 更改以太网共享属性家庭网络连接值,解决电脑笔记本连接校园网显示无internet无法开热点或开热点手机无ip分配问题
  15. 故事板(StoryBoards)和动画(Animations)
  16. 澤天夬 (易經大意 韓長庚)
  17. 人工智能专题讲学:开源数据支撑下的人物与装备分析
  18. Spark SQL PERCENTILE分析调研
  19. air换电池 macbook_大加分!苹果 2018 新款 MacBook Air 电池可独立更换
  20. Oracle dual表详解(zzl)

热门文章

  1. 静态网页制作小技巧(logo及字体图标)
  2. linux link 硬链接,Linux系统中的硬链接(hard link)与软链接(symbolic link)
  3. 数据安全风险分析及应对策略研究
  4. ceph 删除 osd
  5. 76 爬虫 - Scrapy案例(阳光热线问政平台)
  6. ADS1110/ADS1271
  7. CO-PA: 获利能力分析配置和业务实践
  8. Java+AutoCAD-坐标系转换
  9. 架构设计的新思路,《架构之道》读书笔记
  10. 单层感知器python_深度学习之(神经网络)单层感知器(python)(一)