python 中的加密函数
Encryption functions in python
我在 python 中制作了这个程序,它可以加密和解密您输入到 Tkinter 滚动文本框中的字符串。加密由 13 个字符组成,例如“A”到“N”,“B”到“O”等。该程序没有做的一件事是包括数字和特殊符号,例如 ($ & ^) *) 以及更多。我想在 ASCII table 中包含所有可显示的字符,从 space " " 到右大括号 }.
到目前为止,这是我的程序:
from tkinter import *
from tkinter.scrolledtext import *
root = Tk()
canvas = Canvas(root, width=800, height=600)
这是我目前拥有的加密和解密功能(这很可能是我需要更改的地方):
def encrypt_symbols(s):
s = s.upper()
output = ""
for ch in s:
if ch != " ":
num = ord(ch) + 13
if num > 90:
num = num - 26
output = output + chr(num)
else:
output = output + " "
return output
def decrypt_symbols(s):
s = s.upper()
output = ""
for ch in s:
if ch != " ":
num = ord(ch) - 13
if num < 65:
num = num + 26
output = output + chr(num)
else:
output = output + " "
return output
这部分只是 Tkinter 函数(它们与我的问题无关...我认为 :D):
label_plain = Label(root, text = "Plain Text")
label_encrypt = Label(root, text = "Encrypted Text")
label_plain.grid(row=0, column=0, padx=10, pady=10)
label_encrypt.grid(row=0, column=2, padx=10, pady=10)
textbox_plain = ScrolledText(root, width=30, height = 10,
bg = "#DDFFDD")
textbox_encrypt = ScrolledText(root, width=30, height = 10,
bg = "#DDDDFF")
textbox_plain.grid(row=1, column=0, padx=10, pady=10)
textbox_encrypt.grid(row=1, column=2, padx=10, pady=10)
以下是 encrypt/decrypt 过程的其他部分(同样我很确定它们不是我的问题的一部分):
def encrypt():
plain = textbox_plain.get(1.0, "end-1c")
e = encrypt_symbols(plain)
textbox_encrypt.delete(1.0, "end")
textbox_encrypt.insert(1.0, e)
def decrypt():
e = textbox_encrypt.get(1.0, "end-1c")
d = decrypt_symbols(e)
textbox_plain.delete(1.0, "end")
textbox_plain.insert(1.0, d)
frame1 = Frame(root)
frame1.grid(row=1, column=1)
be = Button(frame1, text = "Encrypt >>", command = encrypt)
bd = Button(frame1, text="<< Decrypt", command = decrypt)
be.grid(row = 0, column = 0, padx = 10, pady = 10)
bd.grid(row = 1, column = 0, padx = 10, pady = 10)
我该怎么做?我不认为这是一个复杂的修复,但我不知道如何去做...
随意复制粘贴并自行修改程序!
谢谢!
您可以使用编解码器库 encrypt/decrypt'
from codecs import *
>>> encode('Hello World!', 'rot13')
'Uryyb Jbeyq!'
>>> decode('Uryyb Jbeyq!', 'rot13')
'Hello World!'
它的工作方式与您现在的工作方式基本相同,您只需调整要加密的字符范围即可。另外,使用模数可能更容易一些,您可以为两个方向定义一个公共函数。
def shift(char, amount, low, high):
return chr((ord(char) - low + amount) % high + low)
def encrypt_symbols(s):
return ''.join(shift(c, 13, 32, 126) for c in s)
def decrypt_symbols(s):
return ''.join(shift(c, -13, 32, 126) for c in s)
a = "Shift me by 13 chars, please!"
b = encrypt_symbols(a)
c = decrypt_symbols(b)
print(b)
# `uvs-zr-o->@-pun9-}yrnr.
print(c == a)
# True
请注意,这会将字符转换为不同的“classes”,例如字母到数字,或标点符号到字母。如果你想让角色留在他们各自的class,这会有点复杂。
我在 python 中制作了这个程序,它可以加密和解密您输入到 Tkinter 滚动文本框中的字符串。加密由 13 个字符组成,例如“A”到“N”,“B”到“O”等。该程序没有做的一件事是包括数字和特殊符号,例如 ($ & ^) *) 以及更多。我想在 ASCII table 中包含所有可显示的字符,从 space " " 到右大括号 }.
到目前为止,这是我的程序:
from tkinter import *
from tkinter.scrolledtext import *
root = Tk()
canvas = Canvas(root, width=800, height=600)
这是我目前拥有的加密和解密功能(这很可能是我需要更改的地方):
def encrypt_symbols(s):
s = s.upper()
output = ""
for ch in s:
if ch != " ":
num = ord(ch) + 13
if num > 90:
num = num - 26
output = output + chr(num)
else:
output = output + " "
return output
def decrypt_symbols(s):
s = s.upper()
output = ""
for ch in s:
if ch != " ":
num = ord(ch) - 13
if num < 65:
num = num + 26
output = output + chr(num)
else:
output = output + " "
return output
这部分只是 Tkinter 函数(它们与我的问题无关...我认为 :D):
label_plain = Label(root, text = "Plain Text")
label_encrypt = Label(root, text = "Encrypted Text")
label_plain.grid(row=0, column=0, padx=10, pady=10)
label_encrypt.grid(row=0, column=2, padx=10, pady=10)
textbox_plain = ScrolledText(root, width=30, height = 10,
bg = "#DDFFDD")
textbox_encrypt = ScrolledText(root, width=30, height = 10,
bg = "#DDDDFF")
textbox_plain.grid(row=1, column=0, padx=10, pady=10)
textbox_encrypt.grid(row=1, column=2, padx=10, pady=10)
以下是 encrypt/decrypt 过程的其他部分(同样我很确定它们不是我的问题的一部分):
def encrypt():
plain = textbox_plain.get(1.0, "end-1c")
e = encrypt_symbols(plain)
textbox_encrypt.delete(1.0, "end")
textbox_encrypt.insert(1.0, e)
def decrypt():
e = textbox_encrypt.get(1.0, "end-1c")
d = decrypt_symbols(e)
textbox_plain.delete(1.0, "end")
textbox_plain.insert(1.0, d)
frame1 = Frame(root)
frame1.grid(row=1, column=1)
be = Button(frame1, text = "Encrypt >>", command = encrypt)
bd = Button(frame1, text="<< Decrypt", command = decrypt)
be.grid(row = 0, column = 0, padx = 10, pady = 10)
bd.grid(row = 1, column = 0, padx = 10, pady = 10)
我该怎么做?我不认为这是一个复杂的修复,但我不知道如何去做...
随意复制粘贴并自行修改程序!
谢谢!
您可以使用编解码器库 encrypt/decrypt'
from codecs import *
>>> encode('Hello World!', 'rot13')
'Uryyb Jbeyq!'
>>> decode('Uryyb Jbeyq!', 'rot13')
'Hello World!'
它的工作方式与您现在的工作方式基本相同,您只需调整要加密的字符范围即可。另外,使用模数可能更容易一些,您可以为两个方向定义一个公共函数。
def shift(char, amount, low, high):
return chr((ord(char) - low + amount) % high + low)
def encrypt_symbols(s):
return ''.join(shift(c, 13, 32, 126) for c in s)
def decrypt_symbols(s):
return ''.join(shift(c, -13, 32, 126) for c in s)
a = "Shift me by 13 chars, please!"
b = encrypt_symbols(a)
c = decrypt_symbols(b)
print(b)
# `uvs-zr-o->@-pun9-}yrnr.
print(c == a)
# True
请注意,这会将字符转换为不同的“classes”,例如字母到数字,或标点符号到字母。如果你想让角色留在他们各自的class,这会有点复杂。