最近在区块链技术与安全这门课上学了三节课的密码学,简直无语了…
自然语言处理课上,学了三节多的课的神经网络机器学习…
国科大的学科融合太真实了…
课程笔记就不写博客了,感觉就算写也会搞成PPT截图或者老师讲话记录那种,没意义
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)