密码数论基础

欧几里得算法

在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。可用来求解最大公因子。

def gcd(a, b):
	if b == 0:
		return a
	else:
		return gcd(b, a % b)

拓展欧几里得算法

扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数 a,b,扩展欧几里得算法可以在求得a,b的最大公约数的同时,能找到整数 x,y(其中一个很可能是负数),使它们满足裴蜀定理。

###两数的最大公约数可以用两数的整数倍相加来表示,如 21=5×105+(−2)×252。这个重要的结论叫做裴蜀定理。

扩展欧几里得算法可以用来计算模反元素(也叫模逆元),求出模反元素是RSA加密算法中获得所需公钥、私钥的必要步骤。

def ext_euclid(a, b):	 
	if b == 0:		 
		return 1, 0, a	 
	else:		 
		x, y, q = ext_euclid(b, a % b) 	 
		x, y = y, (x - (a // b) * y)		 
		return x, y, q


欧拉定理

在数论中,欧拉定理(也称费马-欧拉定理或欧拉φ函数定理)是一个关于同余的性质。欧拉定理表明,若 n,a 为正整数,且 n,a 互素(即 gcd(a,n)=1),则

a^φ(n)≡1(modn)a

即a^φ*(n) 与 1 在模 n 下同余;φ(n) 为欧拉函数。

费马小定理

假如 a是一个整数,p 是一个质数,那么 a**pap的倍数,可以表示为:

a**pa(modp)

如果 a 不是 p的倍数,这个定理也可以写成:

a**p−1≡1(modp)

中国剩余定理

在某个范围内的整数可以通过它的一组余数来重构,这组余数是对该整数用一组两两互素的整数取模得到的。

m1=9999898189399710944945175986823699283832634897494811055017931879616685144311436341141766099859326491065848501817142982115771185162997612803117820866651883382451513640992216907651771058051279925943601710718126059368777767096972438472819231427588118556408636136647349913994492726385929483133454782840019414591166043367498351993249753290335295216950119382805885184737511126220686143514761883601207330979621535628586580757368685651088031119467755108590600710850854943670894950779616672270483495059434436010422630145857876354584079848132716930802222032799341529087951644722536001457315831991495602099549789150689752785330
e=1
p=92538061474659434965766707753277647750180905432845534846356528435936888965333226086169904199216215012947710342029002352699085497779485513265351362190598215667657068095618938664837728725648238192919243857683159177678796025508014102729441580525715172436030848188211203036449922481835510023841607043174449794711
q=117331230550909514799361062606577016755769121960239167044709674015606795789348431779715915970888483061434401976415839145435489378040433586586313563656672262745584538867388708562351187045836241162247167973577347869287649039872388811916703606392337210457165669442472123212904588128388579564638536535498924591197

c1=pow(m1,e,p)
c2=pow(m1,e,q)
print(c1)
print(c2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值