在密碼學(xué)中,凱撒密碼(或稱愷撒加密、愷撒變換、變換加密)是一種最簡單且最廣為人知的加密技術(shù)。它是一種替換加密的技術(shù)。這個(gè)加密方法是以愷撒的名字命名的,當(dāng)年愷撒曾用此方法與其將軍們進(jìn)行聯(lián)系。愷撒密碼通常被作為其他更復(fù)雜的加密方法中的一個(gè)步驟,例如維吉尼亞密碼。愷撒密碼還在現(xiàn)代的ROT13系統(tǒng)中被應(yīng)用。但是和所有的利用字母表進(jìn)行替換的加密技術(shù)一樣,愷撒密碼非常容易被破解,而且在實(shí)際應(yīng)用中也無法保證通信安全。
盡管是最簡單的加密技術(shù),但那該怎么在python中如何現(xiàn)實(shí)呢?
代碼如下:
def ask():
while True:
print("Welcome to you coming!")
print("you can choose mode : encrypt(e) or decrypt(d)") #有解密和加密模式
print("If you choose encrypt ,you can lock the message!") #加密提示
print("If you choose decrypt ,you can unlock the message!") #解密提示
print("If you wanna exit , input 'q'!!") #退出提示
mode = input("choose:").lower() #將輸入的模式進(jìn)行變換(從大寫變小寫,小寫部分不變)
if mode in 'encrypt e decrypt d q'.split(): #當(dāng)模式是被要求的encrypt e(加密模式)decrypt d(解密模式) q(退出)時(shí)進(jìn)行下一步操作
#print(mode) #打印輸入的模式
return mode #將mode的值作為返回值
else:
print('Please input right option!!') #輸出提示
def getKey(mode):
key = 0 #設(shè)置默認(rèn)的key
while key = 0 or key >= 26: #限制key的范圍在(1-25以內(nèi)的數(shù))
try: #這里進(jìn)行異常處理,將非整數(shù)類型的輸入進(jìn)行錯(cuò)誤提示打印
key = int(input("Please input your key:(1-26)"))
except:
print("Please input correct number!!")
#對(duì)解密的密匙進(jìn)行變換
if mode == 'd' or mode == 'decrypt':
key = -key
return key
def getMessage(key):
#輸入信息
while True:
informetion = input("Please input message!!") #輸入要解密或者加密的信息
if informetion.isalpha(): #判斷輸入的字符串是否為純字母
break
else:
print("Please input continuous character!!!") #輸錯(cuò)提示
message = '' #設(shè)置輸出的初始值
for x in informetion: #將輸入信息里的進(jìn)行逐一字母加密/解密
num = ord(x) #將單一字符通過ascii表進(jìn)行轉(zhuǎn)換,將字母轉(zhuǎn)換為數(shù)字
num += key #加上key的值進(jìn)行下列運(yùn)算
if x.isupper(): #判斷是否是大寫字母
if num > ord('Z'): #對(duì)超出ascii對(duì)應(yīng)數(shù)值的范圍進(jìn)行處理
num -=26
print(message)
elif num ord('A'):
num +=26
print(message)
elif x.islower(): #判斷是否小寫字母
if num > ord('z'):
num -=26
elif num ord('a'):
num +=26
message += chr(num) #將單一字符通過ascii表進(jìn)行轉(zhuǎn)換,將數(shù)字轉(zhuǎn)換為字母
return message #返回message的值
if __name__=="__main__": #主程序
mode = ask() #將ask()返回值存于mode變量中
if mode == 'q': #進(jìn)行退出判斷
print('welcome!!')
else:
key = getKey(mode) #將mode變量的值帶入getKey函數(shù)中運(yùn)行,運(yùn)行后將key的值存入到key變量中
last = getMessage(key) #將key變量的值帶入到getMessage函數(shù)中,運(yùn)行后將message的值存入到last變量中
print(last)
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- python 密碼學(xué)示例——?jiǎng)P撒密碼的實(shí)現(xiàn)
- Python實(shí)現(xiàn)的凱撒密碼算法示例
- python實(shí)現(xiàn)凱撒密碼、凱撒加解密算法
- 利用python實(shí)現(xiàn)凱撒密碼加解密功能
- Python編程實(shí)現(xiàn)凱撒密碼加密示例