0x00 前言

我们这学期的课程《信息安全与保密》要求期末作业实现一个密码算法及对应的加解密系统,其中做RSA的要求实现加解密、数字签名。考虑到我因为太菜,当初遇到了不少问题,莆田搜索RSA算法实现想参考一下的时候找不到PHP版本的,所以我完成作业后打算自己整一篇以供有需要的后来者参考

考虑到我们期末作业主要任务是“实现RSA加解密、数字签名”,故没有采用大整数运算,受PHP的数据精度限制,素数范围在2的32到48次方(4.29E9~2.81E14),标题中的“简化版”即此意

由于在学校的时候事情比较多,所以一直拖到了放假才开始写,时间有点久了,有些细节记得不大清楚,而且受限于自己的水平,应该会有不少错漏;当时时间比较紧迫,函数封装等也不甚合理

文中内容主要摘自段云所、卫仕民、唐礼勇、陈钟所编《信息安全概论》(高等教育出版社,2003.9)及我上课记的笔记(特别注明之处除外),我的笔记可能也会有错漏之处,烦请海涵并指正 */建立一个RSA密码体制的过程如下: 选择两个大素数p和q

计算乘积n=pq和fai(n)=(p-1)(q-1)

选择大于1小于fai(n)的随机整数e,使得gcd(e, fai(n))=1

计算d使得de与1mod fai(n)同余

对每一个密钥k=(n,p,q,d,e),定义加密变换为Ek(x)=x^e mod n,解密变换为Dk(x)=y^d mod n,这里x,y属于整数

以{e,n}为公开密钥,{p,q,d}为私有密钥

//其中的fai(n)即欧拉函数,意为“和n互素的数的数量”

0x01 Miller-Rabin算法(素性检测)

密钥中的p和q须为素数,而素数选取需要用到素性检测,Miller-Rabin算法可以实现素性检测。由William Stallings所著的《密码编码学与网络安全——原理与实践(第七版)》可知Miller-Rabin算法如下:过程TEST输入整数n,若n不是素数,则返回“合数”,若n可能是素数,也可能不是素数时,返回“不确定”

TEST(n) 找出整数k, q,其中k>0, q是奇数,使(n-1=(2^k)*q)

随机选取整数a, 1

if a^q mod n=1, then 返回“不确定”

for j=0 to k-1 do

if a^((2^j)*q) mod n=n-1 then 返回“不确定”

返回“合数”

而对合数n=13*17=221应用上述测试,若选取a=5,则算法返回“合数”;假设我们选取a=21,则21^55mod221=200, (21^55)^2mod221=220,则测试算法返回“不确定”,意即221可能是素数

故我们需要重复使用Miller-Rabin算法:对随机选取的a重复调用TEST(n),如果某时刻TEST返回“合数”,则n一定不是素数;若TEST连续t次返回“不确定”,当t足够大时,我们可以相信n是素数

实现如下:function millerRabinAlgorithmV2($n) //参照William Stallings所著的《密码编码学与网络安全——原理与实践(第七版)》实现的Miller-Rabin算法,素性检测

{

$k = 1;

$q = ($n - 1) / 2;

while (pow(2, $k) < $n - 1) { //1.找 n-1 = 2^k *q 中的k和q

$q = ($n - 1) / 2;

while (pow(2, $k) * $q < $n - 1) {

if (pow(2, $k) * $q == $n - 1) { //若满足条件,说明找到了对应的k和q,终止循环,否则q减小,继续寻找对应的q

break;

}

$q -= 2;

}

if (pow(2, $k) * $q == $n - 1) { //若满足条件,说明上面的内部循环找到了对应的k和q,则终止外部循环,否则说明没有找到对应的q,故k增大,继续寻找满足条件的k和q

break;

}

$k++;

}

$flags = []; //用数组存储重复调用Miller-Rabin算法产生的结果

while (true) {

$flags = [];

for ($times = 0; $times < 10; $times++) { //设t为10,重复调用10次

$flag = false; //6. 若下面的条件都不满足,$flag没有置true,则不是素数

$a = mt_rand(2, $n - 2); //2. 随机选取整数a, 1

rsa算法php,简化版(小素数版)RSA算法的PHP实现相关推荐

  1. 银行家算法实验报告c语言版,银行家算法实验报告C语言版.doc

    <操作系统>课程综合性实验报告 姓名: 学号: 2016 年 11 月 20 日 实验题目进程调度算法程序设计一.实验目的 通过对安全性算法和银行家算法的模拟,进一步理解资源分配的基本概念 ...

  2. rsa加解密算法报告c语言,RSA加密解密算法c语言程序Word版

    <RSA加密解密算法c语言程序Word版>由会员分享,可在线阅读,更多相关<RSA加密解密算法c语言程序Word版(5页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版 ...

  3. 计算机网络rsa算法,计算机网络安全实验新报告--非对称密码算法RSA.doc

    计算机网络安全实验新报告--非对称密码算法RSA 网络安全实验报告 学院 网络工程专业 班 学号 姓名 成绩评定_______ 教师签名 实验 2 题目 非对称密码算法RSA 课程名称 网络安全 PA ...

  4. java判断对称素数_SM2非对称算法的原理及实现 Java SM2的代码案例 | 一生孤注掷温柔 | 小奋斗...

    SM2椭圆曲线公钥密码算法:我国自主知识产权的商用密码算法,是ECC(Elliptic Curve Cryptosystem)算法的一种,基于椭圆曲线离散对数问题,计算复杂度是指数级,求解难度较大,同 ...

  5. java/php/c#版rsa签名以及java验签实现--转

    在开放平台领域,需要给isv提供sdk,签名是Sdk中需要提供的功能之一.由于isv使用的开发语言不是单一的,因此sdk需要提供多种语言的版本.譬如java.php.c#.另外,在电子商务尤其是支付领 ...

  6. uniapp 小程序实现 RSA 加密

    uniapp 小程序实现 RSA 加密 引言 创建并使用 jsencrypt 进行 RSA 加密 创建 rsa 文件 在需要的地方引用 注意 引言 前端开发时,有时候不可避免会使用到加密,本人在这次的 ...

  7. 基于Montgomery算法的高速、可配置 RSA密码IP核硬件设计系列(五)——模幂模块(抵抗侧信道攻击)模块的设计实现方案

    基于Montgomery算法的高速.可配置RSA密码IP核硬件设计系列(五) 2.2 模幂模块设计(抵抗测信道攻击模块) 2.2.1 模幂模块及内部模块的功能 2.2.3 模幂各模块的实现方案 2.2 ...

  8. 在非对称加密算法RSA中,假设“大”素数p=5,q=11,试给出计算过程。

    文章目录 1. 题目在非对称加密算法RSA中,假设"大"素数p=5,q=11,试给出计算过程. 2. 分析步骤 3. 抄作业简单粗暴看这里 4. 参考 1. 题目在非对称加密算法R ...

  9. 小浩漫画算法目录汇总(20200301版)

    哈喽,大家好.又到月初了,如果你每天跟着小浩刷题,目前应该已经完成了50余题.基本上各类型的题目,也都已有所了解,那我将十分欣慰.这里我对1-2月的原创题解进行了汇总,按照我认为比较理想的学习顺序进行 ...

最新文章

  1. JavaWeb--MVC案例1-------(4)删除
  2. UI基础视图----UIImageView总结
  3. CodeForces - 1207F Remainder Problem(分块)
  4. [react] 在React项目中你用过哪些动画的包?
  5. WPF 虚拟化 VirtualizingWrapPanel 和 VirtualLizingTilePanel
  6. 《成为顶级JAVA架构师的必备书籍》
  7. 开源一周岁,MindSpore新特性巨量来袭
  8. Vue.js 循环语句
  9. 万无一失,网站的高可用架构
  10. 人工智能 一种现代方法 第3章 用搜索树对问题求解
  11. ct扫描方式有哪些_日联科技x-ray:工业CT是怎么进行X射线的断层扫描的
  12. 嵌入式单片机基础篇(三十五)之SPI通信以及51单片机程序
  13. Http 417错误
  14. Yuga Labs 收购 CryptoPunks 的始末
  15. php框架tp6自学笔记——pdf文件下载
  16. 微星显卡拷机测试软件,微星显卡拷机软件(MSI Kombustor)
  17. MAC OS 10个技巧让你秒变MAC达人
  18. 自定义一个虚拟机+将自定义的虚拟机创建成模板机+快速创建虚拟机
  19. 7-7 超级玛丽 (10 分)
  20. 关于CRNN文本识别算法的理解

热门文章

  1. python图像隐写_在图像中隐藏数据:用 Python 来完成图像隐写术
  2. clock_gettime
  3. 洛谷刷题笔记 整理药名
  4. SecureCRT和SecureFx的使用
  5. 红海云签约中国中医药出版社,开启出版行业人力资源数字化新篇章
  6. 深入了解jvm虚拟机
  7. dapper mysql 拓展_Dapper.Common基于Dapper的开源LINQ超轻量扩展
  8. 跨界转型 打造大数据旗舰
  9. LeetCode题集 —— 调整数组顺序使奇数位于偶数前面 + 移动零
  10. 1181: 零起点学算法88——偶数求和(C语言)