python實(shí)現(xiàn)希爾密碼加密的示例代碼
原理
希爾密碼是運(yùn)用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發(fā)明。
每個(gè)字母當(dāng)作26進(jìn)制數(shù)字:A=0, B=1, C=2… 一串字母當(dāng)成n維向量,跟一個(gè)n×n的矩陣相乘,再將得出的結(jié)果模26。(注意用作加密的矩陣(即密匙)在 必須是可逆的,否則就不可能解碼。只有矩陣的行列式和26互質(zhì),才是可逆的。)
實(shí)現(xiàn)
希爾密碼是運(yùn)用基本矩陣論原理的替換密碼,使用一個(gè)m*m的矩陣作為密鑰,此矩陣必須可逆,解密使用逆矩陣解密。
- 加密: 密文向量 = 密鑰矩陣 * 明文向量 (mod 26)
- 解密:明文向量 = 密鑰矩陣逆矩陣 * 密文向量 (mod 26)
使用numpy庫的矩陣對(duì)象,可以十分方便地進(jìn)行矩陣乘法,矩陣求逆和取模等運(yùn)算。
import numpy as np m = 'YOURPINNOISFOURONETWOSIX' #明文 a = np.matrix([[11,2,19],[5,23,25],[20,7,17]]) #密鑰LCTFXZUHR num_m = [] temp = [] count = 1 for i in m: #將明文分為三個(gè)一組 temp.append(ord(i)-ord('A')) if count % 3 == 0: num_m.append(temp) temp = [] count += 1 mat_m = [np.matrix(i).T for i in num_m] #將明文分組轉(zhuǎn)換為向量形式 mat_c = [a * i % 26 for i in mat_m] #得到密文分組的向量形式 num_c = [] temp = [] for i in mat_c: #將密文向量轉(zhuǎn)換為列表形式,且合并到一個(gè)列表 temp = i.tolist() for j in range(3): num_c.append(temp[j][0]) c = [chr(i+ord('A')) for i in num_c] print(''.join(c)) #連接成字符串,輸出密文
到此這篇關(guān)于python實(shí)現(xiàn)希爾密碼加密的示例代碼的文章就介紹到這了,更多相關(guān)python 希爾密碼加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas實(shí)現(xiàn)按照Series分組示例
本文主要介紹了pandas按照Series分組示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08python批量處理PDF文檔輸出自定義關(guān)鍵詞的出現(xiàn)次數(shù)
這篇文章主要介紹了python批量處理PDF文檔,輸出自定義關(guān)鍵詞的出現(xiàn)次數(shù),文中有詳細(xì)的代碼示例,需要的朋友可以參考閱讀2023-04-04解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報(bào)錯(cuò)問題
這篇文章主要介紹了解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08Django+Vue實(shí)現(xiàn)文件上傳下載的項(xiàng)目實(shí)踐
本文主要介紹了Django+Vue實(shí)現(xiàn)文件上傳下載的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06pandas如何解決excel科學(xué)計(jì)數(shù)法問題
這篇文章主要介紹了pandas如何解決excel科學(xué)計(jì)數(shù)法問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11對(duì)Python中range()函數(shù)和list的比較
下面小編就為大家分享一篇對(duì)Python中range()函數(shù)和list的比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04