PYTHON实现RSA算法之简洁代码
来源:互联网 发布:mac launchpad 是什么 编辑:程序博客网 时间:2024/05/21 12:41
写在前面
RSA算法,在现代密码学中真的是算得上么么哒了。它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。
一.算法简介(写得浅显易懂,基础理论请自己查询~)
1. 三个数, p, q, r, 其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数p, q, r 这三个数便是 private key
2. 找出 m, 使得 rm == 1 mod (p-1)(q-1)这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了再来, 计算 n = pqm, n 这两个数便是 public key
3. 加密过程是, 将a看成是一个大整数, 假设 a < n如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t), 即进行分组~则每一位数均小於 n, 然後分段编码接下来, 计算 b == a^m mod n, (0 <= b < n), b 就是编码後的数据。
4.解密过程呢,和加密算法一样,只是用到的密钥不同而已,若加密为公钥,这这一步就用私钥~
二、RSA 的安全性
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n 必须选大一些,因具体适用情况而定。
三、RSA的速度
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。(这就是为什么要使用HASH,详情见我的文章——
HASH之于信息安全领域加解密算法)
四.PYTHON语言实现
#! E:/新建文件夹/python# -*- coding: cp936 -*-def isPrime(number): import math i=2 sqrtnum=(int)(math.sqrt(number)) for i in range(2,sqrtnum+1): if number%i==0: return False i=i+1 return Truedef is_ET_Prime(ee,tt): while tt!=0: a=ee ee=tt tt=a%tt if ee==1: return True else: return Falsedef get_publickey(k,t): d=0 while ((d*k)%t!=1): d+=1 return ddef encryption(plain,d,n): re=(plain**d)%n return re if __name__=="__main__": print "~"*70 Flag =False while True: p=int(raw_input("please input a prime p:")) q=int(raw_input("please input a prime q:")) if ( isPrime(p)and isPrime(q)): break else: print "p or q is not prime!" continue print "p=",p,"q=",q n=q*p t=(q-1)*(p-1) print "n=",n,"t=",t print "~"*70 Flag==False while Flag==False: e=int(raw_input("please input a private key:")) Flag=is_ET_Prime(e,t) if Flag==False: print "e is not prime with the t!" print "the private key e=",e d=get_publickey(e,t) print "the public key d=",d plain=int(raw_input("please input the plain you want to entrypted:")) encry=encryption(plain,d,n) print "plain",plain,"is encrypted as",encry plain1=encryption(encry,e,n) print "encrypt",encry,"is decrypted as",plain1 """ Flag==False while Flag==False: q=int(raw_input("please input a prime q:")) if q==p: continue Flag=isPrime(q) if Flag==False: print "q is not a prime" print "q=",q"""
- PYTHON实现RSA算法之简洁代码
- RSA算法Python实现
- python实现rsa算法
- RSA算法的python实现
- rsa算法的python实现
- python简洁代码实现快速排序
- RSA算法之实现篇
- RSA算法研究与PYTHON实现
- RSA加/解密算法--python实现
- 基于python的简单 RSA算法实现
- Python 代码简洁方法
- 以最简洁的Python代码实现常用矩阵运算
- 代码之美-简洁
- 简洁代码之哲学
- 代码简洁之道
- 代码简洁之道
- Python模拟RSA算法
- python实现RSA加密算法
- hive SQL优化之distribute by和sort by
- linux 进程通信和同步
- android Message的简单实例
- LibvirtError: no supported architecture for os type 'hvm'
- git_版本回滚
- PYTHON实现RSA算法之简洁代码
- 我已经出离愤怒了,因为对自己深深地失望,我要战胜我自己 这是一次救赎!门是窄小的!
- OpenGL: 基于OpenGL实现的多段Bezier曲线拼接
- extjs4中传中文乱码解决方案
- 详解Oracle多种表连接方式
- 正则表达式--js使用案例
- jsp动态生成table
- ngStorage用法
- struts线程安全问题解决