佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > python實現(xiàn)希爾密碼加密的示例代碼

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

熱門標(biāo)簽:智能手機(jī) 網(wǎng)站文章發(fā)布 鐵路電話系統(tǒng) 美圖手機(jī) 檢查注冊表項 呼叫中心市場需求 銀行業(yè)務(wù) 服務(wù)器配置

原理

希爾密碼是運(yùn)用基本矩陣論原理的替換密碼,由Lester S. Hill在1929年發(fā)明。

每個字母當(dāng)作26進(jìn)制數(shù)字:A=0, B=1, C=2… 一串字母當(dāng)成n維向量,跟一個n×n的矩陣相乘,再將得出的結(jié)果模26。(注意用作加密的矩陣(即密匙)在 必須是可逆的,否則就不可能解碼。只有矩陣的行列式和26互質(zhì),才是可逆的。)

實現(xiàn)

希爾密碼是運(yùn)用基本矩陣論原理的替換密碼,使用一個m*m的矩陣作為密鑰,此矩陣必須可逆,解密使用逆矩陣解密。

  • 加密: 密文向量 = 密鑰矩陣 * 明文向量 (mod 26)
  • 解密:明文向量 = 密鑰矩陣逆矩陣 * 密文向量 (mod 26)

使用numpy庫的矩陣對象,可以十分方便地進(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:  #將明文分為三個一組
    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)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 使用python實現(xiàn)希爾、計數(shù)、基數(shù)基礎(chǔ)排序的代碼
  • Python排序搜索基本算法之希爾排序?qū)嵗治?/li>
  • Python實現(xiàn)希爾排序算法的原理與用法實例分析
  • python編程實現(xiàn)希爾排序
  • python實現(xiàn)的希爾排序算法實例

標(biāo)簽:長治 紅河 新疆 河南 樂山 沈陽 上海 滄州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python實現(xiàn)希爾密碼加密的示例代碼》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    泊头市| 桦川县| 鄢陵县| 汾阳市| 蓬莱市| 原平市| 洱源县| 柞水县| 东宁县| 水城县| 鄂州市| 宁强县| 梨树县| 舞钢市| 遵化市| 韶山市| 高唐县| 贞丰县| 滦平县| 栾城县| 甘孜| 温宿县| 扎鲁特旗| 莱州市| 美姑县| 化州市| 崇仁县| 调兵山市| 民和| 青河县| 隆昌县| 蓬安县| 阳城县| 大荔县| 洛宁县| 兰西县| 望都县| 德安县| 城口县| 哈密市| 志丹县|