RSA、DSA算法原理与举例
最近在区块链技术与安全这门课上学了三节课的密码学,简直无语了…
自然语言处理课上,学了三节多的课的神经网络机器学习…
国科大的学科融合太真实了…
课程笔记就不写博客了,感觉就算写也会搞成PPT截图或者老师讲话记录那种,没意义
目录
- RSA
- 背景
- 原理
- 互质
- 欧拉数
- 欧几里得算法
- 扩展欧几里得算法
- 例子
- DSA
- 背景
- 原理
- 例子
RSA
背景
RSA加密算法是一种非对称加密算法,是1977年由麻省理工学院的(Ron Rivest)、(Adi Shamir)和(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA算法是目前使用最为广泛的非对称加密算法,这得益于它的算法原理易于理解、实现相对简单(相对于椭圆曲线公钥密码算法)。不过我们国家的非对称加密算法国家标准并不是RSA,而是基于椭圆曲线密码学的SM2。
RSA算法应用非常广泛,主要可以分为如下两类:一是小数据段的加密,尤其是秘钥的传输;而是数字签名,可以说目前绝大多数的数字签名算法都是使用的RSA算法。
RSA算法的出现并不是为了替代对称加密算法,通常RSA非对称加密算法要比AES、DES等对称加密算法慢的多。这是因为RSA算法的计算过程涉及到了很多大数运算,非常的耗时。RSA算法通常和AES等对称加密算法一起使用,RSA算法加密算法在这里起到了加密对称秘钥的作用,大批量数据的加密实际上使用AES等对称加密算法加密的。
RSA算法的原理是由一系列的数学原理和数论知识支撑的,其中主要是模运算、费马小定理、欧拉定理和欧拉函数。
RSA算法的安全性依赖于大数的相乘在计算上是简单的,但是大数的因数分解是复杂的。具体的来讲就是计算两个大质数p和q的乘积是简单的,但是想从p和q的乘积分解出p和q是非常难的。
原理
互质
互质是公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。
互质,若N个整数的最大公因数是1,则称这N个整数互质。
欧拉数
数学中,欧拉数是一组重要的常数,即函数sech t在t=0点的泰勒展开式的系数En。
前几个欧拉数为:E0=1,E1=1,E2=5,E3=61,E4=1385,E5=50521,E6=2702765,……
欧拉数与欧拉多项式En(x)有关,有时也称2^n*En(1/2)为欧拉数。
欧几里得算法
欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
/*
欧几里得算法:辗转求余
原理: gcd(a,b)=gcd(b,a mod b)
当b为0时,两数的最大公约数即为a
getchar()会接受前一个scanf的回车符
*/
#include<stdio.h>unsigned int MaxCommonFactor(int a,int b)
{if(b<=0)return a;return MaxCommonFactor(b,a%b);
}unsigned int Gcd(unsigned int M,unsigned int N)
{unsigned int Rem;while(N > 0){Rem = M % N;M = N;N = Rem;}return M;
}int main(void)
{int a,b;scanf("%d %d",&a,&b);printf("the greatest common factor of %d and %d is ",a,b);printf("%d\n",Gcd(a,b));printf("recursion:%d\n",MaxCommonFactor(a,b));return 0;
}
#include <iostream>
using namespace std;
int gcd(int a, int b)
{if (a < b) swap(a, b);return b == 0 ? a : gcd(b, a % b);
}
int x, y;
int main(){cin >> x >> y;cout << gcd(x, y);return 0;
}
int gcd(int m,int n)
{ if(n == 0){return m; }int r = m%n;return gcd(n,r);
}
function gcd(a, b) {if (a % b == 0) return b;return gcd(b, a % b);
}
def gcd(a, b):while a != 0:a, b = b % a, areturn b
扩展欧几里得算法
扩展欧几里得算法可用于RSA加密等领域。
扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。除了计算a、b两个整数的最大公约数,此算法还能找到整数x、y(其中一个很可能是负数)。
通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数 a 与 b, 必存在有整数 x 与 y 使得ax + by = gcd(a,b)。有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。
扩展欧几里得算法可以用来计算模反元素(也叫模逆元),而模反元素在RSA加密算法中有举足轻重的地位。
int gcdEx(int a,int b,int*x,int*y)
{if(b==0){*x=1,*y=0 ;return a ;}else {int r=gcdEx(b,a%b,x,y);/* r = GCD(a, b) = GCD(b, a%b) */int t=*x ;*x=*y ;*y=t-a/b**y ;return r ;}
}
def ext_euclid(a, b): if b == 0: return 1, 0, a else: x, y, q = ext_euclid(b, a % b) # q = gcd(a, b) = gcd(b, a%b) x, y = y, (x - (a // b) * y) return x, y, q
例子
1、P = 11,q = 13 (随机选两个素数)
2、N = 11*13 = 143 (公共模数)
3、
RSA、DSA算法原理与举例相关推荐
- 带你彻底理解RSA算法原理
1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法.在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对称密码:加 ...
- RSA算法原理(简单易懂)
1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法.在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对称密码 ...
- 奇妙的安全旅行之DSA算法
hi,大家好,我是开发者FTD.今天我们来介绍一下非对称加密算法中的DSA算法. DSA 算法简介 DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名 ...
- 多类线性分类器算法原理及代码实现 MATLAB
多类线性分类器算法原理及代码实现 MATLAB 一.算法原理 下面举例说明为何蓝圈部分在case2中是确定的而在case1中不确定: 二.代码实现 1.HK函数 function [] = HK(w1 ...
- RSA算法原理——(2)RSA简介及基础数论知识
上期为大家介绍了目前常见加密算法,相信阅读过的同学们对目前的加密算法也算是有了一个大概的了解.如果你对这些解密算法概念及特点还不是很清晰的话,昌昌非常推荐大家可以看看HTTPS的加密通信原理,因为HT ...
- RSA算法原理简介,非对称加密,公开密钥算法(易懂篇)
RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解.我们经 ...
- RSA算法与DSA算法的区别
当我们在Linux/Unix系统(windows下需用git的bash工具)中通过生成ssh认证密钥时,你要(用-t type来)选择创建一对RSA或者DSA密钥.这两者之间有什么区别?是什么原因让人 ...
- RSA算法原理详解(简单易懂)
本文主要是简单高效地讲解RSA算法的基本数学原理以及加解密的步骤,算法背景以及设计到的数学证明省略.本文主要参考wikipedia和博文<非对称加密算法–RSA加密原理>. 非对称公钥加密 ...
- RSA算法加密解密举例
RSA算法加密解密举例 使用如下数字字母对照表: 明文M="its all greek to me" ,p=47,q=59,e=17,求出其密文以及给出RSA 算法加/解密过程.( ...
- android支付宝rsa加密算法,支付宝支付流程与RSA算法原理
RSA加密算法的原理 支付宝的三种支付流程 1.所有的支付逻辑处理,全在服务器完成,现在被淘汰了 原理就是电商App吧所有的信息提交给电商服务器,然后又电商服务器与支付宝服务器进行交互 2.所有的支付 ...
最新文章
- RunTime运行时在iOS中的应用之UITextField占位符placeholder
- awk使用shell中的变量
- docker挂载的目录无法读写
- [渝粤教育] 西南科技大学 网络程序设计 在线考试复习资料
- transition属性详细讲解
- SSH实战项目——在线商品拍卖网
- thinkphp框架的优缺点
- Hide()方法不生效
- mysql 5.0卸载_卸载MySQL 5.0
- 回顾备忘—Android系统hal层相关系统粗概
- 如何使用浏览器的网页全文翻译工具
- 软件项目风险评估报告
- 使用Sequelize实现文章和评论的一对多关系并实现评论的按时间排序
- Outlook设置新folder location后无法显示default view的解决方案
- elementui组件中,树形组件的使用
- oracle sample 慢,【案例】Oracle优化 latch free问题Result Cache:RC Latch引起数据库缓慢...
- 手机联系人头像包_动漫壁纸 | 星游记动漫手机全面屏壁纸
- 最大公约数gcd函数简介
- 如何通过jsoup网络爬虫工具爬取网页数据,并通过jxl工具导出到excel
- 云服务器、个人服务器、软路由、NAS的奇特用法(一)you-get下载视频 以b站为例(可支持网易云音乐、acfun、土豆、优酷等详情见附录)
热门文章
- Codeforces Round #155 (Div. 2) C YY题目
- SQL问题记录——Unable to connect SqlServer Oledb ...
- 为什么RegisterClientScriptResource方法在自定义控件中的RenderContents期间不起作用?...
- 群体智能之粒子群优化(PSO)
- 【VS2010学习笔记】【错误调试】error LNK1123:转换到COFF期间失败;文件无效或者损坏
- Rabin-Karp算法详解和实现(python)
- day1--numpy
- 计算机网络实验视频word,(完整word版)《计算机网络与通信》实验.docx
- go语言学习---数据类型、运算符、表达式
- jquey控制元素滚动条,外层div滚动,内层顶部div固定不动