RSA算法优化

  1. 大数乘法
  2. 模乗优化
  3. 剩余定理(孙子定理)
  4. RSA加解密
  5. python的RSA计算优化
#-*- coding: utf-8 -*-
'''
/*********************************************************************************
*Copyright(C),2000-2013,KK Studio
*FileName: rsa
*Author: KingKong
*Version: 1.0
*Date: 20130709
*Description: //用于主要说明此程序文件完成的主要功能
//与其他模块或函数的接口、输出值、取值范围、
//含义及参数间的控制、顺序、独立及依赖关系
*Others: //其他内容说明
*Function List: //主要函数列表,每条记录应包含函数名及功能简要说明
1.RSA
2.RSA CRT
3.RSA MulMod
*History: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简介
1.20130702:
**********************************************************************************/
''' # sudo apt-get install python-setuptools
# sudo easy_install rsa-3.1.1-py2.7.egg # import binascii
#print repr(binascii.unhexlify('0123456789abcdef')) EASYKEY = True def CRT_SRC(c, n, p, q, d=None, exp1=None, exp2=None):
'''
剩余定理的基础实现
c是密文
exp1 = d % (p-1)
exp2 = d % (q-1)
(1)计算d1←d(mod(p-1))与d2←d(mod(q-1));
(2)计算C1←c(modp)与C2←c(modq);
(3)计算M1←C1^d1 (modp)与M2←C2^d2(modq);
(4)计算B1←q-1(modp)与B2←p-1(modq);
(5)计算m←(M1*B1*q+M2*B2*p)(modN)
'''
c1 = c % p
c2 = c % q
if d != None:
d1 = d % (p-1)
d2 = d % (q-1)
elif exp1 != None:
d1 = exp1
d2 = exp2
else:
return 0 import rsa
y1 = rsa.common.inverse(q, p)
y2 = rsa.common.inverse(p, q) m1 = pow(c1, d1, p)
m2 = pow(c2, d2, q) m = (m1*q*y1 + m2*p*y2)%n
return m def CRT_MMRC(c, n, p, q, coef, d=None, exp1=None, exp2=None):
'''
剩余定理的快速实现
c是密文
exp1 = d % (p-1)
exp2 = d % (q-1)
self.coef = rsa.common.inverse(q, p)
(1)计算d1←d(mod(p-1))与d2←d(mod(q-1));
(2)计算C1←c(mod p)与C2←c(mod q);
(3)计算M1←C1^d1 (modp)与M2←C2^d2(modq);
(4)计算B←p^-1(modp);
(5)计算m←M1+[(M2-M1)*B(modq)]*p
'''
c1 = c % p
c2 = c % q
if d != None:
d1 = d % (p-1)
d2 = d % (q-1)
elif exp1 != None:
d1 = exp1
d2 = exp2
else:
return 0 y1 = coef m1 = pow(c1, d1, p)
m2 = pow(c2, d2, q) m = m2 + (((m1-m2)*y1)%p)*q
return m def dec2bin(number):
'''
转换数字为二进制字符串
:param number:
'''
m = {'0':'0000', '1':'0001', '2':'0010', '3':'0011',
'4':'0100', '5':'0101', '6':'0110', '7':'0111',
'8':'1000', '9':'1001', 'a':'1010', 'b':'1011',
'c':'1100', 'd':'1101', 'e':'1110', 'f':'1111'}
s = hex(number)[2:].rstrip('L')
return ''.join(m[x] for x in s).lstrip('0') #print dec2bin(10), len(dec2bin(10)) def MulMod(m, r, e):
'''
a^m%r
343^474%2003=1819
'''
c = 1L
b = dec2bin(e)
length = 0;
while(length < (len(b))):
c = (c*c)%r;
# print c, b[length]
if (b[length] == "1"):
c = (c * m) % r;
length = length + 1;
return c def RSA_ENC(m, n, e):
'''
RSA加密,处理小数据
:param m:
:param n:
:param e:
'''
return m**e%n def RSA_DEC(c, n, d):
'''
RSA解密,处理小数据
:param c:
:param n:
:param d:
'''
return c**d%n def RSA_ENC_Fast(m, n, e):
'''
RSA加密,处理大数,加速处理
:param m:
:param n:
:param e:
'''
return pow(m, e, n) def RSA_DEC_Fast(c, n, d):
'''
RSA解密,处理大数,加速处理
:param c:
:param n:
:param d:
'''
return pow(c, d, n) def main():
if EASYKEY == True:
n = 3727264081
d = 3349121513
e = 65537
p = 65063
q = 57287
exp1 = 55063
exp2 = 10095
coef = 50797
else:
n = 133258714669197804455201327242498072620373933399830946281753432589524373262313529490829857553863402092345114025453326547226675345976454214588491707723768296657213731743431331618394950680996499630699923360897031860272219245284778878593279460078556127568327691304405295451439978360703575209901885763486177804307
d = 88839143112798536303467551494998715080249288933220630854502288393016248841542352993886571702575601394896742683635551031484450230650969476392327805149178849037945720743702166302175205762735121467799910708222531056914667451445033725048565810909623712841116051352011118012226070375134490825522121220289982706011
e = 3
p = 11933806723950669295207846073987787705734940703054957716278358174994444687961839258803748173125990183157845108140695431551588508864566689717312651807708143
q = 11166488426677208786957286068049106111694059354243605518996542043073672540329181171939965947432316470456431280477737669321209492974404928986620399396037149
exp1 = 7955871149300446196805230715991858470489960468703305144185572116662963125307892839202498782083993455438563405427130287701059005909711126478208434538472095
exp2 = 7444325617784805857971524045366070741129372902829070345997694695382448360219454114626643964954877646970954186985158446214139661982936619324413599597358099
coef = 9906165481638181059785426924280606820580988396251355030296387570862138753002899617836092623649635665775562393844489153345463178213574659230193241203692517 m = 9999 print '********RSA BEGIN********************************************'
print 'message:', m
c = RSA_ENC(m, n, e)
print 'encrypt:', c
r = RSA_DEC_Fast(c, n, d)
print 'decrypt:', r
print '********RSA END**********************************************' print '********RSA FAST BEGIN***************************************'
print 'message:', m
c = RSA_ENC_Fast(m, n, e)
print 'encrypt:', c
r = RSA_DEC_Fast(c, n, d)
print 'decrypt:', r
print '********RSA FAST END*****************************************' print '********RSA MulMod BEGIN*************************************'
print 'message:', m
c = MulMod(m, n, e)
print 'encrypt:', c
r = MulMod(c, n, d)
print 'decrypt:', r
print '********RSA MulMod END***************************************' print '********RSA CRT BEGIN****************************************'
print 'message:', m
c = RSA_ENC_Fast(m, n, e)
print 'encrypt:', c
r = CRT_SRC(c, n, p, q, d)
print 'decrypt:', r
print '********RSA CRT END******************************************' print '********RSA CRT FAST BEGIN***********************************'
print 'message:', m
c = RSA_ENC_Fast(m, n, e)
print 'encrypt:', c
r = CRT_MMRC(c, n, p, q, coef, d, exp1, exp2)
print 'decrypt:', r
print '********RSA CRT FAST END*************************************' if __name__ == '__main__':
main()

RSA算法优化的更多相关文章

  1. 实现 RSA 算法之改进和优化(第三章)(老物)

    第三章 如何改进和优化RSA算法 这章呢,我想谈谈在实际应用出现的问题和理解. 由于近期要开始各种忙了,所以写完这章后我短时间内也不打算出什么资料了=- =(反正平时就没有出资料的习惯.) 在讲第一章 ...

  2. 跨越千年的RSA算法

    转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

  3. 这个发现是否会是RSA算法的BUG、或者可能存在的破解方式?

    笔者从事各种数据加解密算法相关的工作若干年,今天要说的是基于大数分解难题的RSA算法,可能有些啰嗦. 事情的起因是这样的,我最近针对一款芯片进行RSA CRT解密的性能优化.因为期望值是1024bit ...

  4. RSA 算法

    RSA 算法  from http://www.matrix67.com/blog/archives/5100 所有工作都准备就绪,下面我们可以开始描述 RSA 算法了. 首先,找两个质数,比如说 1 ...

  5. [转载]RSA算法详解

    原文:http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

  6. 重复造轮子之RSA算法(一) 大素数生成

    出于无聊, 打算从头实现一遍RSA算法 第一步, 大素数生成 Java的BigInteger里, 有个现成的方法 public static BigInteger probablePrime(int ...

  7. 实现 RSA 算法之 C 语言实现(第二章)(老物)

    第二章 如何实现应用RSA算法 趁着白天在自家店里的闲暇时间来写写第二章了,假设记住了第一章的各种定理之后,我们又该如何实现RSA密码的加密解密呢?也懒得废话了,直接进入正题吧. 先回顾几个知识点: ...

  8. 实现 RSA 算法之基础公式证明(第一章)(老物)

    写这篇日志是拖了很久的事情,以前说要写些算法相关的文章给想学信息安全学(简称信安),密码学的同学提供些入门资料,毕竟这种知识教师上课也不会细讲太多(纯理论偏重),更不用说理解和应用了,说到RSA公钥( ...

  9. 加密算法——RSA算法(c++简单实现)

    RSA算法原理转自:https://www.cnblogs.com/idreamo/p/9411265.html C++代码实现部分为本文新加 RSA算法简介 RSA是最流行的非对称加密算法之一.也被 ...

随机推荐

  1. 基于jsoup的Java服务端http(s)代理程序-代理服务器Demo

    亲爱的开发者朋友们,知道百度网址翻译么?他们为何能够翻译源网页呢,iframe可是不能跨域操作的哦,那么可以用代理实现.直接上代码: 本Demo基于MVC写的,灰常简单,copy过去,简单改改就可以用 ...

  2. C程序中引用自定义的C函数模块

    原文:C程序中引用自定义的C函数模块 我们知道,刚开始接触C语言编程,一般都是在一个.c或者.cpp(以下只说.c)的文件中编写代码,其中一定会有一个入口函数, 也就是main()函数,你可以将程序代 ...

  3. MAC中在eclipse luna上搭建移动平台自动化测试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录

    这几天因为原来在用的hp laptop的电池坏掉了,机器一不小心就断电,所以只能花时间在自己的macbook pro上重新搭建整套环境,大家都知道搭建环境是个很琐碎需要耐心的事情,特别是当你搭建的安卓 ...

  4. Net Framework中的提供的常用委托类型

    .Net Framework中的提供的常用委托类型   .Net Framework中提供有一些常用的预定义委托:Action.Func.Predicate.用到委托的时候建议尽量使用这些委托类型,而 ...

  5. SSM 使用方法

    System Safety Monitor(以下简称为SSM),它是一款俄罗斯出品的系统监控软件,通过监视系统特定的文件(如注册表等)及应用程序,达到保护系统安全的目的.在某些功能上比Winpatro ...

  6. DELL iDRAC 远程虚拟机报错:虚拟介质分离或所选虚拟磁盘驱动器的虚拟介质重定向已由另一用户使用

    原因很简单,那就是虚拟介质的映射功能,只能被使用一次. 推荐做法: 1.由于通过远程,在Lifecycle Controller里DeployOS安装系统,需要在虚拟介质里映射ISO,因此映射功能要留 ...

  7. LibVLC video controls

    原文 http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__video.html VLC  3.0.0-git ...

  8. Node.js日志框架选型比較:Winston

    日志对于问题定位.调试,系统性能调优至关重要,尤其是系统复杂以及在线执行的情况下. 好的开发框架都会有一个可开启关闭/可配置记录级别的日志系统.我们从下面几个方面来做选型: 1. 每行日志都须要有准确 ...

  9. SpringMVC类型转换、数据绑定

    SpringMVC类型转换.数据绑定详解[附带源码分析] 目录 前言 属性编辑器介绍 重要接口和类介绍 部分类和接口测试 源码分析 编写自定义的属性编辑器 总结 参考资料 前言 SpringMVC是目 ...

  10. 快速创建InfoPath表单

    快速创建InfoPath表单 2010年已经过去了一半了,这时候再说初识InfoPath可能会被很多人笑话,但是又有多少人真正认识InfoPath呢?无论你是刚刚 听说这个东西还是它的老相好都请同我一 ...