IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python编写RSA密码系统 -> 正文阅读

[Python知识库]python编写RSA密码系统

作者:>
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 15 13:40:51 2021

@author: 16381
"""
import secrets
import math

#素性检验
n=5515596313
d=2674607171
e=1757316971
data=dict(a='01',b='02',c='03',d='04',e='05',f='06',g='07',h='08',i='09',j='10',k='11',
           l='12',m='13',n='14',o='15',p='16',q='17',r='18',s='19',t='20',u='21',v='22',w='23',x='24',y='25',z='26',_='00')
def isshu(m):
    a=int(math.sqrt(m))
    for i in range(2,a):
        if m%i==0:
            return 0
    return 1
def creatshusu():
    a=secrets.randbelow(1000000)
    while( a<100000 or isshu(a)==0 ):
      a=secrets.randbelow(1000000)
    return a
def gcd1(m,n):
    if m<n:
        t=n
        n=m
        m=t
    while(n!=0):
        t=m%n
        m=n
        n=t
    return m
#求乘法逆元
def chengfares(n,d):
    t=0
    v=1
    a=n
    b=d
    r=a%b
    while r!=0:
        q=int(a/b)
        r=a%b
        if r==0:
            break
        a=b
        b=r
        w=v
        v=t-q*v
        t=w
    if(b!=1):
        print(f'{d}的逆元不存在')
    if(v<0):
        v=n+v
    print(f'{d}的逆元为{v}')
    return v
#创建RSA密码
def creatkey():
    global n,d,e
    q=creatshusu()
    p=creatshusu()
    while(p==q):
        p=creatshusu()
    n=p*q
    n_1=(p-1)*(q-1)
    e=secrets.randbelow(n_1)
    while(gcd1(n_1,e)!=1):
        e=secrets.randbelow(n_1)
    d=chengfares(n,e)
    print(f'密钥对已生成,公钥为:{e},{n},私钥为{d},{n}')
#二进制转化函数
def change(m):
    b=[]
    while(m!=0):
        b.append(m%2)
        m=int(m/2)
    b.reverse()
    return b
#快速指数
def quickzhishu(a,m,n):
    b=change(m)
    c=0
    d=1
    for i in range(0,len(b)):
        c=int(c*2)
        d=(d*d)%n
        if (b[i]==1):
            c=c+1
            d=(d*a)%n
    return d
def jiami(c):
    # c=[1612050119,500230109,2000061518,13050000]
    m=[]
    for i in range(0,len(c)):
        m.append(quickzhishu(c[i],e,n))
    print(m)
    return m
def jiemi(m):
    c=[]
    zi=['']
    s=[]
    for i in range(0,len(m)):
        c.append(quickzhishu(m[i],d,n))
    print('解密')
    print(c)
    for j in range(0,len(c)):
        while c[j]!=0:
            # print(c[j])
            temp=c[j]%100
            # print(temp)
            zi.append(chr(temp+96))
            # print(chr(temp+96),end=(''))
            c[j]=int(c[j]/100) 
        # z=zi.reverse()
        # print(z,end='')
        zi.reverse()
        # print(zi)       
        for l in range(0,len(zi)):
            s.append(zi[l])
        zi=[]
        # s.append(zi)
    for i in range(0,len(s)):
        print(s[i],end=(''))
    # print(s)
    return s
def changenum(c):
    print(c)
    n=[]
    num=[]
    for i in range(0,len(c)):
        n.append(data[c[i]])
    #     print(data[c[i]],end=(''))
    # print(' ')
    # print(len(n))
    # print(n)
    # m=int(len(n)*2/4/2)
    # if(len(n)*2/4/2>int(len(n)*2/4/2)):
    #     m=m+1
    # print(m)
    m=5
    for i in range(0,len(n),m):
        temp=int(n[i])
        for j in range(1,m):
            if i+j>=len(n):
                for k in range(j,m):
                    temp=temp*100
                break
            temp=(temp)*100+int(n[i+j])
        num.append(temp)
        # print(temp)
        # print(n[i]+n[i+1])
    return num

# creatkey()
c=input('请输入明文:')
# c='hello_word'
# c='hello_word'
# for i in range(0,len(c),2):
#     print()
# print(changenum(c))
jiemi(jiami(changenum(c)))

# print(len(changenum(c)))

# jiemi(jiami())
# b=[]

# a='b'
# print(ord(a[0])-97)
# c=[1612050119,500230109,2000061518,13050000]
# print(len(c))
# print(type(c[3])\
def main():
    return 0
# print(creatshusu())

# print(isshu(17))
# print(quickzhishu(1612050119, 1757316971, 5515596313))
# chefares(26,7)

# b=[]
# print(len(b))

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:27:01  更:2021-10-20 12:28:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:53:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码