RSA加密算法Python实现

RSA加密算法Python实现RSA加密算法Python实现RSA加密算法是目前使用最广泛的加密方式,具体流程见RSA加密算法之前想过用C语言实现,但是由于C语言对整型的位宽有要求,RSA加密算法中需要使用的数字大小远远超出C语言中longlongint的最大值,最近学习了Python之后,发现Python没有这一要求,可以较容易的实现。以下模拟中只能输入数字,因为实际过程中所有文字信息都被转化成Unicode数字码传输,代码中没有做转化这一步,只模拟算法。fromrandomimportrandintfromd

大家好,又见面了,我是你们的朋友全栈君。

RSA加密算法Python实现

RSA加密算法是目前使用最广泛的加密方式,具体流程见RSA加密算法
之前想过用C语言实现,但是由于C语言对整型的位宽有要求,RSA加密算法中需要使用的数字大小远远超出C语言中long long int 的最大值,最近学习了Python之后,发现Python没有这一要求,可以较容易的实现。
在这里插入图片描述

from random import randint
from datetime import datetime
"""判断是否是素数"""
def is_sushu(sushu):
for i in range(2,sushu):
if sushu % i == 0:
return False
return True
"""随机生成指定范围的大素数"""
def Create_Sushu():
while True:
sushu = randint(100,1000 )#下限越大,加密越安全,此处考虑计算时间,取值较小
if is_sushu(sushu):
return sushu
"""计算欧拉函数"""
def Oula(sushu1 , sushu2):
return (sushu1-1)*(sushu2-1)
"""判断是否互质"""
def Is_Huzhi(int_min,int_max):
for i in range(2,int_min+1):
if int_min % i == 0 and int_max % i == 0:
return False
return True
"""计算公钥,直接计算编程较简单,此处考虑了计算效率的优化"""
def Creat_E(oula):
top = oula
while True:
i = randint(2,top)
for e in range(i,top):
if Is_Huzhi(e,oula):
return e     
top = i    
"""计算私钥"""
def Compute_D(oula,e):
k = 1
while ( k*oula+1 )% e != 0:
k+=1
return int((k*oula+1)/e)
""" 将字符串转成ASCII """
def Transfer_To_Ascii(messages):
result = []
for message in messages:
result.append(  ord(message) ) 
return result
""" 将列表转化成字符串 """
def Transfer_To_String(string_list):
string = ''.join(string_list)
return string
if __name__ == "__main__":
""" p、q为大素数 n=p*q oula = (p-1)* (q-1) e 为公钥 d 为私钥 """
print("通信开始,正在计算公钥与私钥...")
time_start = datetime.now()
p = Create_Sushu()
q = p
while p ==q :
q = Create_Sushu()
n = p * q
oula = Oula(p, q)
e = Creat_E(oula)
d = Compute_D(oula,e)
time_end = datetime.now()
print(f"计算完成,用时{str(time_end -time_start)}秒 ")
print(f"公钥:n = {str(n)} , e = {str(e)}")
print(f"私钥:n = {str(n)} , d = {str(d)}")
#print('p='+str(p)+'\n'+'q='+str(q)+'\n'+'n='+str(n)+'\n'+'oula='+str(oula)+'\n'+'d='+str(d)+'\n')
m = input('待加密信息:')
m_list = Transfer_To_Ascii(m)
print("正在加密...")
c_list = []
for m in m_list:
c = m**e%n
c_list.append(c)
print(f"密文:{c_list}")
print("正在解密...")
decode_messages=[]
for c in c_list:
decode_message = c**d%n
decode_messages.append(chr(decode_message))
print(f"解密信息:{Transfer_To_String(decode_messages)}")
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139987.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pojAGTC(LCS,DP)

    pojAGTC(LCS,DP)

  • Windows安装git客户端[通俗易懂]

    Windows安装git客户端[通俗易懂]1、客户端安装工具如下Git-2.12.2.2-64-bit.exe下载地址:https://gitforwindows.org/,界面如下TortoiseGit-2.4.0.2-64bit.msi下载地址:https://tortoisegit.org/,界面如下Git-2.12.2.2-64-bit.exe:是需要安装的git真正工具TortoiseGit-2.4.0.2-64bit.msi:…

  • 数仓建设 | ODS、DWD、DWM等理论实战(好文收藏)

    数仓建设 | ODS、DWD、DWM等理论实战(好文收藏)本文目录:一、数据流向二、应用示例三、何为数仓DW四、为何要分层五、数据分层六、数据集市七、问题总结导读数仓在建设过程中,对数据的组织管理上,不仅要根据业务进行纵向的主题域划分,还需要横向的数仓分层规范。本文作者围绕企业数仓分层展开分析,希望对你有帮助。因文章太长,本文不是完结版,文末可获取完整PDF版从事数仓相关工作的人员都知道数仓模型设计的首要工作之一就是进行模型分层,可见模型分层在模型设计过程中的重要性,确实优秀的分层设计是一个数仓项目能否建设成功的核心要素,让数

  • matlab如何取模_matlab取模运算

    matlab如何取模_matlab取模运算mod函数采用floor,rem函数采用fix函数。那么什么是floor和fix?fix(x):截尾取整。如:>>fix([3.4,-3.4])ans=3-3floor

  • 手机python3.0编程_pydroid安装lxml

    手机python3.0编程_pydroid安装lxml手机屏幕太少,写代码不方便,建议用电脑学习python有时候,就是不想正襟危坐的坐在电脑前面,想要在手机上轻量级的写点代码。安卓软件推荐Pydroid.3Pydroid3免费高级版…

  • maven 环境变量的配置「建议收藏」

    maven 环境变量的配置「建议收藏」我的电脑是win10_64位的。一、安装,我使用的是免安装版的,直接解压缩就可以使用。二、配置环境变量。  1.打开环境变量配置。右键计算机→属性→高级系统设置→高级→环境变量,在系统变量中配置。  2.配置MAVEN_HOME。在系统变量中新建,变量名MAVEN_HOME,变量值,maven文件夹路径,我的路径是F:\Wab\资料\maven\资料\apach…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号