欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)簡(jiǎn)易凱撒密碼的示例代碼

 更新時(shí)間:2022年09月15日 14:15:12   作者:Java程序員-張凱  
密碼的使用最早可以追溯到古羅馬時(shí)期,《高盧戰(zhàn)記》有描述愷撒曾經(jīng)使用密碼來(lái)傳遞信息,即所謂的“愷撒密碼”。本文將利用Python實(shí)現(xiàn)簡(jiǎn)易的凱撒密碼,感興趣的可以了解一下

概念及原理

根據(jù)百度百科上的解釋,凱撒密碼是一種古老的加密算法。

密碼的使用最早可以追溯到古羅馬時(shí)期,《高盧戰(zhàn)記》有描述愷撒曾經(jīng)使用密碼來(lái)傳遞信息,即所謂的“愷撒密碼”,它是一種替代密碼,通過(guò)將字母按順序推后起3位起到加密作用,如將字母A換作字母D,將字母B換作字母E。因據(jù)說(shuō)愷撒是率先使用加密函的古代將領(lǐng)之一,因此這種加密方法被稱為愷撒密碼。這是一種簡(jiǎn)單的加密方法,這種密碼的密度是很低的,只需簡(jiǎn)單地統(tǒng)計(jì)字頻就可以破譯。 現(xiàn)今又叫“移位密碼”,只不過(guò)移動(dòng)的為數(shù)不一定是3位而已。

密碼術(shù)可以大致別分為兩種,即易位和替換,當(dāng)然也有兩者結(jié)合的更復(fù)雜的方法。在易位中字母不變,位置改變;替換中字母改變,位置不變。

將替換密碼用于軍事用途的第一個(gè)文件記載是愷撒著的《高盧記》。愷撒描述了他如何將密信送到正處在被圍困、瀕臨投降的西塞羅。其中羅馬字母被替換成希臘字母使得敵人根本無(wú)法看懂信息。

蘇托尼厄斯在公元二世紀(jì)寫(xiě)的《愷撒傳》中對(duì)愷撒用過(guò)的其中一種替換密碼作了詳細(xì)的描寫(xiě)。愷撒只是簡(jiǎn)單地把信息中的每一個(gè)字母用字母表中的該字母后的第三個(gè)字母代替。這種密碼替換通常叫做愷撒移位密碼,或簡(jiǎn)單的說(shuō),愷撒密碼。

在密碼學(xué)中,凱撒密碼(或稱愷撒加密、愷撒變換、變換加密)是一種最簡(jiǎn)單且最廣為人知的加密技術(shù)。它是一種替換加密的技術(shù)。這個(gè)加密方法是以愷撒的名字命名的,當(dāng)年愷撒曾用此方法與其將軍們進(jìn)行聯(lián)系。愷撒密碼通常被作為其他更復(fù)雜的加密方法中的一個(gè)步驟,例如維吉尼亞密碼。愷撒密碼還在現(xiàn)代的ROT13系統(tǒng)中被應(yīng)用。但是和所有的利用字母表進(jìn)行替換的加密技術(shù)一樣,愷撒密碼非常容易被破解,而且在實(shí)際應(yīng)用中也無(wú)法保證通信安全。

說(shuō)了這么多,相信大家可能也有點(diǎn)暈了,下面這張圖加密方法就是錯(cuò)三個(gè)位來(lái)實(shí)現(xiàn)加密功能

(1)  設(shè)計(jì)思想:

1.由于輸入的是一串英文字符,所以我們用String類來(lái)編寫(xiě),況且String類有許多方法可以調(diào)用

2.錯(cuò)位需要對(duì)每個(gè)字符進(jìn)行操作,可以把字符串轉(zhuǎn)換為字符數(shù)組,調(diào)用的是string類的toCharArray方法

3.由于string類也是采用Unicode字符集,所以我們進(jìn)行錯(cuò)位操作時(shí)只需讀取一個(gè)字符,然后與數(shù)字3相加,再轉(zhuǎn)換為char類型,就實(shí)現(xiàn)了錯(cuò)3位加密操作,解密則減3.

4.在加密操作中,如果加密的是字母表最后三個(gè),則必須實(shí)現(xiàn)循環(huán)操作,即X加密后是A,Y加密后是B,Z加密后是C,實(shí)現(xiàn)這個(gè)就要用到ASCII碼,當(dāng)讀到XYZ時(shí),加密則是減去23后轉(zhuǎn)換為char類型,當(dāng)然,解密時(shí)讀到ABC加上23即可

(2)  程序流程圖:

實(shí)現(xiàn)過(guò)程

我們定義個(gè)key=13,此時(shí)我們對(duì)字符串This is my secret message進(jìn)行加密

import pyperclip
 
message = 'This is my secret message'#保存加密或解密的字符串
key = 13#保存加密密鑰的整數(shù)
 
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)

打印結(jié)果如下:

GUVF VF ZL FRPERG ZRFFNTR
[Finished in 0.8s]

我們來(lái)對(duì)上面這部分代碼進(jìn)行分析

我們可以看到,第一行調(diào)用了一個(gè)pyperclip的模塊,我們需要下載這個(gè)模塊,很簡(jiǎn)單,安裝一個(gè)pip,直接輸入pip install pyperclip即可完成安裝

message = 'This is my secret message'#保存加密或解密的字符串
key = 13#保存加密密鑰的整數(shù)

message指定了用來(lái)保存加解密的字符串

而key用來(lái)保存加密密鑰

message = message.upper()

調(diào)用了一個(gè)upper函數(shù),將加解密字符串全部變成大寫(xiě)字母

后面的實(shí)現(xiàn)過(guò)程很簡(jiǎn)單,判斷mode值是否為encrpy,然后對(duì)字符進(jìn)行移位

破解原理及實(shí)現(xiàn)

我們將加密后的字符串進(jìn)行破解,實(shí)現(xiàn)原理如下:

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))

打印結(jié)果如下:

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即為我們所求的答案。

到此這篇關(guān)于Python實(shí)現(xiàn)簡(jiǎn)易凱撒密碼的示例代碼的文章就介紹到這了,更多相關(guān)Python凱撒密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 聊聊Numpy.array中[:]和[::]的區(qū)別在哪

    聊聊Numpy.array中[:]和[::]的區(qū)別在哪

    這篇文章主要介紹了在Numpy.array中[:]和[::]的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 解決jupyter notebook import error但是命令提示符import正常的問(wèn)題

    解決jupyter notebook import error但是命令提示符import正常的問(wèn)題

    這篇文章主要介紹了解決jupyter notebook import error但是命令提示符import正常的問(wèn)題,具有很好的參考
    2020-04-04
  • PyTorch之torch.matmul函數(shù)的使用及說(shuō)明

    PyTorch之torch.matmul函數(shù)的使用及說(shuō)明

    PyTorch的torch.matmul是一個(gè)強(qiáng)大的矩陣乘法函數(shù),支持不同維度張量的乘法運(yùn)算,包括廣播機(jī)制。提供了矩陣乘法的語(yǔ)法,參數(shù)說(shuō)明,以及使用示例,幫助理解其應(yīng)用方式和乘法規(guī)則
    2024-09-09
  • pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式示例

    pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式示例

    pytest提供了許多運(yùn)行命令以供定制化運(yùn)行某一類測(cè)試用例或者某個(gè)測(cè)試用例等,下面這篇文章主要給大家介紹了關(guān)于pytest用例間參數(shù)傳遞的兩種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12
  • python實(shí)現(xiàn)低通濾波器代碼

    python實(shí)現(xiàn)低通濾波器代碼

    今天小編就為大家分享一篇python實(shí)現(xiàn)低通濾波器代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • tensorflow通過(guò)模型文件,使用tensorboard查看其模型圖Graph方式

    tensorflow通過(guò)模型文件,使用tensorboard查看其模型圖Graph方式

    今天小編就為大家分享一篇tensorflow通過(guò)模型文件,使用tensorboard查看其模型圖Graph方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python的pandas類庫(kù)結(jié)構(gòu)參數(shù)

    Python的pandas類庫(kù)結(jié)構(gòu)參數(shù)

    pandas是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,Pandas 納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具,需要的朋友可以參考下
    2023-07-07
  • typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié)

    typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié)

    當(dāng)在 Python 函數(shù)中聲明一個(gè) dictionary 作為參數(shù)時(shí),我們一般會(huì)把 key 和 value 的數(shù)據(jù)類型聲明為全局變量,而不是局部變量。,這篇文章主要介紹了typing.Dict和Dict的區(qū)別及它們?cè)赑ython中的用途小結(jié),需要的朋友可以參考下
    2023-06-06
  • 基于python+selenium的二次封裝的實(shí)現(xiàn)

    基于python+selenium的二次封裝的實(shí)現(xiàn)

    這篇文章主要介紹了基于python+selenium的二次封裝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python實(shí)現(xiàn)打包成庫(kù)供別的模塊調(diào)用

    Python實(shí)現(xiàn)打包成庫(kù)供別的模塊調(diào)用

    這篇文章主要介紹了Python實(shí)現(xiàn)打包成庫(kù)供別的模塊調(diào)用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07

最新評(píng)論