此程式碼非原創,參考過後進行思考與嘗試,思路與部分程式碼參考自 https://iter01.com/570152.html`11
初步處理 : 先拿到所輸入字串的ASCII碼,與使用者輸入位移量
接著ASCII碼加上位移量
strr = input("Enter your input: ") # 先輸入字串
theKey = int(input("Enter a Number: ")) # 輸入數字 當位移量
#ord(strr) ord只收字元 並將她轉成ASCII碼
for getNum in strr: # 遍歷剛剛輸入的字串
num = ord(getNum) # 拿到每個字母的ASCII碼
num2 = num
num2 += theKey # 針對位移量進行移動
#mystring = str(num2)
print("原本的asicc為: " + f'{num}')
print("經過位移的數字為: ",f'{num2}')
print("接收到的input是 : ", strr )
print("")
結果:
將位移後結果轉換
print("經過位移的數字為: " , f'{num2}' , " 轉換後為" + chr(num2))
會出現其他非英文字母的符號
對照ASCII轉換的圖可知,加上位移量轉換後會超出英文字母範圍
所以接著要對超出英文字母範圍的碼進行進行加減
if getNum.isupper(): # 先判斷大小寫
if num2 > ord('Z'): # 如果加上位移量後比Z的ASCII還大 就-
num2 -=26
elif num2 < ord('A'): # 如果加上位移量後比A的ASCII還小 就+
num2 +=26
elif getNum.islower():
if num2 > ord('z'): # 如果加上位移量後比z的ASCII還大 就-
num2 -=26
elif num2 < ord('a'): # 如果加上位移量後比a的ASCII還小 就+
num2 +=26
after += chr(num2)
結果:
雖然解決超出英文ASCII碼的問題,但仍然可見有奇怪的字混入
這是因為空白鍵也被進行運算了
所以下一個步驟是將非英文的字元抓出來
if getNum.isalpha():
才進行位移運算
else:
after += getNum 否則將他放回去
結果:
字串已經可以正確的加密了
在已知位移量的情況下可以直接推回去
theKey = -theKey (將剛剛的位移量推回去)
簡易的Caesar cipher實作已經完成
其他解密的方法還有窮舉法、頻率分析或者樣式單詞分析等等