網站首頁 編程語言 正文
概念及原理
根據百度百科上的解釋,凱撒密碼是一種古老的加密算法。
密碼的使用最早可以追溯到古羅馬時期,《高盧戰記》有描述愷撒曾經使用密碼來傳遞信息,即所謂的“愷撒密碼”,它是一種替代密碼,通過將字母按順序推后起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據說愷撒是率先使用加密函的古代將領之一,因此這種加密方法被稱為愷撒密碼。這是一種簡單的加密方法,這種密碼的密度是很低的,只需簡單地統計字頻就可以破譯。 現今又叫“移位密碼”,只不過移動的為數不一定是3位而已。
密碼術可以大致別分為兩種,即易位和替換,當然也有兩者結合的更復雜的方法。在易位中字母不變,位置改變;替換中字母改變,位置不變。
將替換密碼用于軍事用途的第一個文件記載是愷撒著的《高盧記》。愷撒描述了他如何將密信送到正處在被圍困、瀕臨投降的西塞羅。其中羅馬字母被替換成希臘字母使得敵人根本無法看懂信息。
蘇托尼厄斯在公元二世紀寫的《愷撒傳》中對愷撒用過的其中一種替換密碼作了詳細的描寫。愷撒只是簡單地把信息中的每一個字母用字母表中的該字母后的第三個字母代替。這種密碼替換通常叫做愷撒移位密碼,或簡單的說,愷撒密碼。
在密碼學中,凱撒密碼(或稱愷撒加密、愷撒變換、變換加密)是一種最簡單且最廣為人知的加密技術。它是一種替換加密的技術。這個加密方法是以愷撒的名字命名的,當年愷撒曾用此方法與其將軍們進行聯系。愷撒密碼通常被作為其他更復雜的加密方法中的一個步驟,例如維吉尼亞密碼。愷撒密碼還在現代的ROT13系統中被應用。但是和所有的利用字母表進行替換的加密技術一樣,愷撒密碼非常容易被破解,而且在實際應用中也無法保證通信安全。
說了這么多,相信大家可能也有點暈了,下面這張圖加密方法就是錯三個位來實現加密功能
(1) ?設計思想:
1.由于輸入的是一串英文字符,所以我們用String類來編寫,況且String類有許多方法可以調用
2.錯位需要對每個字符進行操作,可以把字符串轉換為字符數組,調用的是string類的toCharArray方法
3.由于string類也是采用Unicode字符集,所以我們進行錯位操作時只需讀取一個字符,然后與數字3相加,再轉換為char類型,就實現了錯3位加密操作,解密則減3.
4.在加密操作中,如果加密的是字母表最后三個,則必須實現循環操作,即X加密后是A,Y加密后是B,Z加密后是C,實現這個就要用到ASCII碼,當讀到XYZ時,加密則是減去23后轉換為char類型,當然,解密時讀到ABC加上23即可
(2) ?程序流程圖:
實現過程
我們定義個key=13,此時我們對字符串This is my secret message進行加密
import pyperclip
message = 'This is my secret message'#保存加密或解密的字符串
key = 13#保存加密密鑰的整數
mode = 'encrypt'
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
translated = ''
message = message.upper()
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
if mode == 'encrypt':
num = num + key
elif mode == 'decrypt':
num = num - key
if num >= len(LETTERS):
num = num - len(LETTERS)
elif num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symbol
print(translated)
pyperclip.copy(translated)
打印結果如下:
GUVF VF ZL FRPERG ZRFFNTR
[Finished in 0.8s]
我們來對上面這部分代碼進行分析
我們可以看到,第一行調用了一個pyperclip的模塊,我們需要下載這個模塊,很簡單,安裝一個pip,直接輸入pip install pyperclip即可完成安裝
message = 'This is my secret message'#保存加密或解密的字符串
key = 13#保存加密密鑰的整數
message指定了用來保存加解密的字符串
而key用來保存加密密鑰
message = message.upper()
調用了一個upper函數,將加解密字符串全部變成大寫字母
后面的實現過程很簡單,判斷mode值是否為encrpy,然后對字符進行移位
破解原理及實現
我們將加密后的字符串進行破解,實現原理如下:
import pyperclip
message = 'GUVF VF ZL FRPERG ZRFFNTR'
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for key in range(len(LETTERS)):
translated = ''
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
num = num - key
if num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symbol
print('Key #%s:%s'%(key,translated))
打印結果如下:
Key #0:GUVF VF ZL FRPERG ZRFFNTR
Key #1:FTUE UE YK EQODQF YQEEMSQ
Key #2:ESTD TD XJ DPNCPE XPDDLRP
Key #3:DRSC SC WI COMBOD WOCCKQO
Key #4:CQRB RB VH BNLANC VNBBJPN
Key #5:BPQA QA UG AMKZMB UMAAIOM
Key #6:AOPZ PZ TF ZLJYLA TLZZHNL
Key #7:ZNOY OY SE YKIXKZ SKYYGMK
Key #8:YMNX NX RD XJHWJY RJXXFLJ
Key #9:XLMW MW QC WIGVIX QIWWEKI
Key #10:WKLV LV PB VHFUHW PHVVDJH
Key #11:VJKU KU OA UGETGV OGUUCIG
Key #12:UIJT JT NZ TFDSFU NFTTBHF
Key #13:THIS IS MY SECRET MESSAGE
Key #14:SGHR HR LX RDBQDS LDRRZFD
Key #15:RFGQ GQ KW QCAPCR KCQQYEC
Key #16:QEFP FP JV PBZOBQ JBPPXDB
Key #17:PDEO EO IU OAYNAP IAOOWCA
Key #18:OCDN DN HT NZXMZO HZNNVBZ
Key #19:NBCM CM GS MYWLYN GYMMUAY
Key #20:MABL BL FR LXVKXM FXLLTZX
Key #21:LZAK AK EQ KWUJWL EWKKSYW
Key #22:KYZJ ZJ DP JVTIVK DVJJRXV
Key #23:JXYI YI CO IUSHUJ CUIIQWU
Key #24:IWXH XH BN HTRGTI BTHHPVT
Key #25:HVWG WG AM GSQFSH ASGGOUS
[Finished in 0.2s]
我們可以看出,Key#13即為我們所求的答案。
原文鏈接:https://blog.csdn.net/qq_41701956/article/details/123455294
相關推薦
- 2022-08-25 R語言行篩選的方法之filter函數詳解_R語言
- 2022-07-03 python?for循環如何實現控制步長_python
- 2023-10-17 常用的utlis封裝
- 2022-09-05 Shiro 和 Spring Security 的比較
- 2021-12-02 Golang共享變量如何解決問題_Golang
- 2022-08-06 Golang泛型與反射的應用詳解_Golang
- 2022-06-06 typescript封裝屬性、public、private、protected、constructo
- 2022-06-11 .Net項目在Docker容器中開發部署_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支