标题同义密文:鋇𤆋𧏀�𙠇𡬰𐧰𗝷𫔸𧛫𥾘𭊶氕⸒𨕏𗲐

日常偷懒挂代码,之后有空再讲解

预览

e n加密 python rsa python rsa加密解密 字符串_e n加密 python rsa


分不同的加密模式(分参数不同导致密文效果不同,以及解码的原理不同两种),单数字加密只能加密一个数字,这个数字可以很大,只要小于模数(大素数1和大素数2的乘积)就行,全字符加密可以任意输入任何内容,均可进行加密,自定义模数需要自行设定参数,乱码格式和框框模式,密文显示不同,如加密“python天下第一”“博主好帅”等等,结果如下

乱码格式:鋇𤆋𧏀�𙠇𡬰𫦥𝱶𕫂

框框模式:𡝫񈮗󑹜񝅙򄤁񾃈񈝗𰗒񾺘󈘦

再比如加密一段代码

def Mutual_prime(num1,num2): #求解最大公因数是否为1
    flag = False
    while True:
        if num1>num2:
            if(num1%num2==0):
                if(num2==1):
                    flag=True
                    break
                else:
                    break
            else:
                num1,num2=num2,num1%num2
        else:
            num1,num2=num2,num1
    # if Greatest_common_divisor(num1,num2)==1:
    #     flag=True
    return flag

乱码格式结果:
꧀⍋𫗥甤𛔓𕵆𧏀𕵆௤𧒬𑬃鋇𚙹𡓺䁣⍋𗷅𡬰𕵆䁣า꿊𡬰𕵆䁣𚈿𛕙𩞹켫甤甤甤甤𫗥𧒬௤𙤅甤𕀵甤𤕲௤𧒬𬇪⍋켫甤甤甤甤𠡩�𡓺𧒬⍋甤𩻮𚙹𕵆⍋𩞹켫甤甤甤甤甤甤甤甤𡓺𫗥甤𡬰𕵆䁣า𖻫𡬰𕵆䁣𚈿𩞹켫甤甤甤甤甤甤甤甤甤甤甤甤𡓺𫗥𗷅𡬰𕵆䁣า𒚨𡬰𕵆䁣𚈿𕀵𕀵𑮫𛕙𩞹켫甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤𡓺𫗥𗷅𡬰𕵆䁣𚈿𕀵𕀵า𛕙𩞹켫甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤𫗥𧒬௤𙤅𕀵𩻮𚙹𕵆⍋켫甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤𥖊𚙹⍋௤𚊝켫甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤⍋𧒬𬇪⍋𩞹켫甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤𥖊𚙹⍋௤𚊝켫甤甤甤甤甤甤甤甤甤甤甤甤⍋𧒬𬇪⍋𩞹켫甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤甤𡬰𕵆䁣า꿊𡬰𕵆䁣𚈿𕀵𡬰𕵆䁣𚈿꿊𡬰𕵆䁣า𒚨𡬰𕵆䁣𚈿켫甤甤甤甤甤甤甤甤⍋𧒬𬇪⍋𩞹켫甤甤甤甤甤甤甤甤甤甤甤甤𡬰𕵆䁣า꿊𡬰𕵆䁣𚈿𕀵𡬰𕵆䁣𚈿꿊𡬰𕵆䁣า켫甤甤甤甤𞲱甤𡓺𫗥甤🕗𚙹⍋௤𧏀⍋𬇪𧏀𑬃�𙠇䁣䁣𙠇𡬰𑬃꧀𡓺𪬷𡓺𬇪𙠇𚙹𗷅𡬰𕵆䁣า꿊𡬰𕵆䁣𚈿𛕙𕀵𕀵า𩞹켫甤甤甤甤𞲱甤甤甤甤甤𫗥𧒬௤𙤅𕀵𩻮𚙹𕵆⍋켫甤甤甤甤𚙹⍋𧏀𕵆𚙹𡬰甤𫗥𧒬௤𙤅甤
框框模式结果:
󎉧𤞴򋟘򥡌򌂐🥓󑹜🥓񏽯񤮀򣤂𡝫򽨤񸋒򇱟𤞴𹙽񾃈🥓򇱟񡩮󍿓񾃈🥓򇱟󛕻򆸩𠂹򥡌󐳂񍵨񈔳𥴅𨯀𬙳𲈖񧪽ی𱀗󐑿񡩮󆺥򥡌򥡌򥡌򥡌򋟘񤮀񏽯񳶘򥡌򳋑򥡌󌩮񏽯񤮀񘗦𤞴󆺥򥡌򥡌򥡌򥡌񋭧񝅙񸋒񤮀𤞴򥡌򥧾򽨤🥓𤞴𠂹󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌񸋒򋟘򥡌񾃈🥓򇱟񡩮򜩾񾃈🥓򇱟󛕻𠂹󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌񸋒򋟘𹙽񾃈🥓򇱟񡩮񦧐񾃈🥓򇱟󛕻򳋑򳋑򦁊򆸩𠂹󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌񸋒򋟘𹙽񾃈🥓򇱟󛕻򳋑򳋑񡩮򆸩𠂹󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򋟘񤮀񏽯񳶘򳋑򥧾򽨤🥓𤞴󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌󎻆򽨤𤞴񏽯񢸿󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌𤞴񤮀񘗦𤞴𠂹󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌󎻆򽨤𤞴񏽯񢸿󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌𤞴񤮀񘗦𤞴𠂹󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌񾃈🥓򇱟񡩮󍿓񾃈🥓򇱟󛕻򳋑񾃈🥓򇱟󛕻󍿓񾃈🥓򇱟񡩮񦧐񾃈🥓򇱟󛕻󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌𤞴񤮀񘗦𤞴𠂹󆺥򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌򥡌񾃈🥓򇱟񡩮󍿓񾃈🥓򇱟󛕻򳋑񾃈🥓򇱟󛕻󍿓񾃈🥓򇱟񡩮󆺥򥡌򥡌򥡌򥡌󐳂򥡌񸋒򋟘򥡌󜝄򽨤𤞴񏽯󑹜𤞴񘗦󑹜򣤂󆔱򄤁򇱟򇱟򄤁񾃈򣤂󎉧񸋒죏񸋒񘗦򄤁򽨤𹙽񾃈🥓򇱟񡩮󍿓񾃈🥓򇱟󛕻򆸩򳋑򳋑񡩮𠂹󆺥򥡌򥡌򥡌򥡌󐳂򥡌򥡌򥡌򥡌򥡌򋟘񤮀񏽯񳶘򳋑򥧾򽨤🥓𤞴󆺥򥡌򥡌򥡌򥡌򽨤𤞴󑹜🥓򽨤񾃈򥡌򋟘񤮀񏽯񳶘򥡌
是不是非常有趣和神奇,大家有兴趣可以测试一下是否可以还原
RSA加密通话(最终版6.6)

功能代码:

# -*- coding: utf-8 -*-
"""
Created on Fri May 22 01:23:16 2020

@author: 全栈-听风起
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import QtCore
import rsa1_ui
from functools import partial
from random import randint

# gflag=1

def Fast_power_radix(a,b,c): #快速幂取余
    a=a%c
    ans=1
    while b!=0:
        if b&1:
            ans=(ans*a)%c
        b>>=1
        a=(a*a)%c
    return ans

def Prime_number(num):
    flag = True
    for i in range(2,num,1):
        if num%i==0:
            flag=False
    return flag 

def Mutual_prime(num1,num2):
    flag = False
    while True:
        if num1>num2:
            if(num1%num2==0):
                if(num2==1):
                    flag=True
                    break
                else:
                    break
            else:
                num1,num2=num2,num1%num2
        else:
            num1,num2=num2,num1
    # if Greatest_common_divisor(num1,num2)==1:
    #     flag=True
    return flag 

def Eulor(ui):
    if ui.lineEdit.text()!="" and ui.lineEdit_2.text()!="":
        num1=int(ui.lineEdit.text())
        num2=int(ui.lineEdit_2.text())
        # n=num1*num2;                  #计算模数
        if Prime_number(num1) and Prime_number(num2):
            eulor=(num1-1)*(num2-1)
            ui.lineEdit_3.setText(str(eulor))

def Public_key(ui):
    if ui.lineEdit_3.text()!="" and ui.lineEdit_4.text()!="":
        eulor=int(ui.lineEdit_3.text())
        private_key=int(ui.lineEdit_4.text())
        for public_key in range(1,eulor-1):
            if (public_key*private_key-1)%eulor==0 and Mutual_prime(public_key,eulor):
                ui.lineEdit_5.setText(str(public_key))
                return 1
        ui.lineEdit_5.setText("None")
        return 0

def Public_key1(eulor,private_key):
    for public_key in range(1,eulor-1):
        if (public_key*private_key-1)%eulor==0 and Mutual_prime(public_key,eulor):
            return 1
    return 0
            
def Encrypt(ui):
    if ui.lineEdit.text()!="" and ui.lineEdit_2.text()!="":
        num1=int(ui.lineEdit.text())
        num2=int(ui.lineEdit_2.text())
        if ui.lineEdit_5.text()!="":
            public_key=int(ui.lineEdit_5.text())
            plaintext=ui.plainTextEdit.toPlainText()
            n=num1*num2;                  #计算模数
            if ui.comboBox.currentIndex()!=0:
                Ciphertext=""
                for char in plaintext:
                    Ciphertext+=chr(Fast_power_radix(ord(char),public_key,n))  #化成ascii 
                ui.plainTextEdit_2.setPlainText(Ciphertext)
            else:
                if(plaintext.isdigit()==False):
                    ui.plainTextEdit.setPlainText("现在是单数字加密模式,仅能加密一个数字")
                else:
                    Ciphertext=str(Fast_power_radix(int(plaintext),public_key,n))
                    ui.plainTextEdit_2.setPlainText(Ciphertext)

def Decrypt(ui):
    if ui.lineEdit.text()!="" and ui.lineEdit_2.text()!="":
        num1=int(ui.lineEdit.text())
        num2=int(ui.lineEdit_2.text())
        if ui.lineEdit_4.text()!="":
            private_key=int(ui.lineEdit_4.text())
            Ciphertext=ui.plainTextEdit_3.toPlainText()
            n=num1*num2;                  #计算模数
            if ui.comboBox.currentIndex()!=0:
                plaintext=""
                for char in Ciphertext:
                    plaintext+=chr(Fast_power_radix(ord(char),private_key,n)) 
                ui.plainTextEdit_4.setPlainText(plaintext)
            else:
                if(Ciphertext.isdigit()==False):
                    ui.plainTextEdit_3.setPlainText("现在是单数字加密模式,仅能解密一个数字")
                else:
                    plaintext=str(Fast_power_radix(int(Ciphertext),private_key,n))
                    ui.plainTextEdit_4.setPlainText(plaintext)
        
def rec1(ui):
    if ui.lineEdit.text()=="":
        num1=randint(2, 1000)
    else:
        num1=int(ui.lineEdit.text())
    f=1
    while f==1:
        if Prime_number(num1):
            f=0
        else:
            num1 += 1
    ui.lineEdit.setText(str(num1))
    
def rec2(ui):
    if ui.lineEdit_2.text()=="":
        num2=randint(2, 1000)
    else:
        num2=int(ui.lineEdit_2.text())
    f=1
    while f==1:
        if Prime_number(num2):
            f=0
        else:
            num2 += 1
    ui.lineEdit_2.setText(str(num2))
    
def rec3(ui):
    if ui.lineEdit_3.text()!="":
        if ui.lineEdit_4.text()=="":
            private_key=randint(2, 100)
        else:
            private_key=int(ui.lineEdit_4.text())
        f=1
        eulor=int(ui.lineEdit_3.text())
        while f==1:
            if Public_key1(eulor,private_key)==1:
                f=0
                ui.lineEdit_4.setText(str(private_key))
            else:
                private_key+=1
    
def cha_gflag(ui):
    if ui.comboBox.currentIndex()==1:
        ui.lineEdit.setText("907")
        ui.lineEdit_2.setText("211")
        ui.lineEdit_3.setText("190260")
        ui.lineEdit_4.setText("9857")
        ui.lineEdit_5.setText("118553")  
    if ui.comboBox.currentIndex()==2:
        ui.lineEdit.setText("907")
        ui.lineEdit_2.setText("1009")
        ui.lineEdit_3.setText("913248")
        ui.lineEdit_4.setText("521")
        ui.lineEdit_5.setText("899225")  

def refreash():
    ui.lineEdit.setText("")
    ui.lineEdit_2.setText("")
    ui.lineEdit_3.setText("")
    ui.lineEdit_4.setText("")
    ui.lineEdit_5.setText("")
    ui.plainTextEdit.setPlainText("")
    ui.plainTextEdit_2.setPlainText("")
    ui.plainTextEdit_3.setPlainText("")
    ui.plainTextEdit_4.setPlainText("")

    
if __name__ == '__main__':
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = rsa1_ui.Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    ui.action5.triggered.connect(refreash)
    ui.pushButton.clicked.connect(partial(Eulor, ui))
    ui.pushButton_2.clicked.connect(partial(Public_key, ui))
    ui.pushButton_3.clicked.connect(partial(Encrypt, ui))
    ui.pushButton_4.clicked.connect(partial(Decrypt, ui))
    ui.pushButton_5.clicked.connect(partial(rec1, ui))
    ui.pushButton_6.clicked.connect(partial(rec2, ui))
    ui.pushButton_7.clicked.connect(partial(rec3, ui))
    ui.pushButton_8.clicked.connect(partial(cha_gflag,ui))
    sys.exit(app.exec_())