久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python實(shí)現(xiàn)希爾密碼加密的示例代碼

瀏覽:125日期:2022-07-28 11:09:24
目錄原理實(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庫(kù)的矩陣對(duì)象,可以十分方便地進(jìn)行矩陣乘法,矩陣求逆和取模等運(yùn)算。

import numpy as npm = ’YOURPINNOISFOURONETWOSIX’ #明文a = np.matrix([[11,2,19],[5,23,25],[20,7,17]]) #密鑰LCTFXZUHRnum_m = []temp = []count = 1for i in m: #將明文分為三個(gè)一組 temp.append(ord(i)-ord(’A’)) if count % 3 == 0:num_m.append(temp)temp = [] count += 1mat_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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 洪湖市| 于田县| 肃南| 明光市| 长泰县| 惠安县| 许昌市| 友谊县| 灌阳县| 白山市| 盐城市| 泰来县| 福州市| 伊春市| 康马县| 黄浦区| 丰宁| 简阳市| 桓台县| 海伦市| 府谷县| 沅陵县| 五大连池市| 顺昌县| 贺兰县| 丰都县| 连云港市| 固原市| 临泉县| 广州市| 黎城县| 宁远县| 高碑店市| 延安市| 庆安县| 藁城市| 莆田市| 赣榆县| 丰镇市| 长治县| 泾川县|