标题同义密文:鋇𤆋𧏀�𡬰𐧰𗝷𫔸𧛫𥾘𭊶氕⸒𨕏𗲐
日常偷懒挂代码,之后有空再讲解
预览
分不同的加密模式(分参数不同导致密文效果不同,以及解码的原理不同两种),单数字加密只能加密一个数字,这个数字可以很大,只要小于模数(大素数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_())