原理
希爾密碼是運用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發(fā)明。
每個字母當作26進制數(shù)字:A=0, B=1, C=2… 一串字母當成n維向量,跟一個n×n的矩陣相乘,再將得出的結(jié)果模26。(注意用作加密的矩陣(即密匙)在 必須是可逆的,否則就不可能解碼。只有矩陣的行列式和26互質(zhì),才是可逆的。)
實現(xiàn)
希爾密碼是運用基本矩陣論原理的替換密碼,使用一個m*m的矩陣作為密鑰,此矩陣必須可逆,解密使用逆矩陣解密。
- 加密: 密文向量 = 密鑰矩陣 * 明文向量 (mod 26)
- 解密:明文向量 = 密鑰矩陣逆矩陣 * 密文向量 (mod 26)
使用numpy庫的矩陣對象,可以十分方便地進行矩陣乘法,矩陣求逆和取模等運算。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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: #將明文分為三個一組 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)換為列表形式,且合并到一個列表 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實現(xiàn)希爾密碼加密的示例代碼的文章就介紹到這了,更多相關(guān)python 希爾密碼加密內(nèi)容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_43531895/article/details/106305244