最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python密碼學(xué)列置換密碼學(xué)習(xí)

 更新時間:2022年05月23日 17:20:43   作者:Jarrycow  
這篇文章主要為大家介紹了python密碼學(xué)列置換密碼學(xué)習(xí)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

列置換密碼

參考教材:《現(xiàn)代密碼學(xué)教程》P46 3.1.1

過程

加密過程

  • 將明文p以設(shè)定的固定分組寬度m按行寫出,即每行有m個字符;若明文長度不是m的整數(shù)倍,則不足部分用雙方約定的方式填充,如雙方約定用空格代替空缺處字符,不妨設(shè)最后得字符矩陣[Mp]n×m
  • 按1,2…,m的某一置換σ交換列的位置次序得字符矩陣[Mp]n×m
  • 把矩陣按[Mp]n×m列的順序依次讀出得密文序列c。

解密過程

  • 將密文c以分組寬度n按列寫出得到字符矩陣[Mp]n×m
  • 按加密過程用的置換σ的逆置換σ-1交換列的位置次序得字符矩陣[Mp]n×m
  • 把矩陣[Mp]n×m按1,2…,n行的順序依次讀出得明文p

說明

以例3.2為例

σ=(143)(56)即每個括號里部分輪著相對應(yīng)

1→4→3→1

5→6→5

這里我是用字典表示

        for i in range(len(s)): 
            for j in range(len(s[i])-1):
                Key[int(s[i][j])]=int(s[i][j+1]) #密鑰字典
                antiKey[int(s[i][j+1])]=int(s[i][j]) #反密鑰字典
            Key[int(s[i][-1])]=int(s[i][0]) #解決最后一個的問題
            antiKey[int(s[i][0])]=int(s[i][-1])
            temp.append(int(s[i][-1]))

當(dāng)然,這兒σ=(143)(56)中沒有2,因?yàn)?對應(yīng)他自己即

2→2

所以要再單獨(dú)表示

sameKey=lenKey-set(temp) #找到?jīng)]有變化的密鑰
    for i in sameKey:
        Key[i]=i
        antiKey[i]=i

而加密的時候,便是把明文先變?yōu)榫仃嚕d根據(jù)密鑰進(jìn)行轉(zhuǎn)換

比如本題便將矩陣第一列轉(zhuǎn)換為第四列,第四列轉(zhuǎn)換為第三列,第三列轉(zhuǎn)換為第一列,以此類推

這里可以用生成式完成

M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)] #矩陣轉(zhuǎn)換

完整代碼

'''列置換密碼
Auher:Jarrycow
time:2020-04-17
'''
import re
class colCode:
    __m=0
    __n=0
    __key=[] # 密鑰
    __apaMsg="" # 明文
    __secMsg="" #密文
    def __init__(self,m): # 初始化,定義矩陣寬
        self.__m=m
        __n=0
        __key=[] 
        __apaMsg="" 
        __secMsg="" 
    def getKey(self,s): # 密鑰形成函數(shù)
        m=self.__m
        Key={}
        antiKey={}
        s=re.split(r'[()]',s) #以()分界
        while '' in s: # 消除''
            s.remove('')
        temp=[]
        lenKey={i+1 for i in range(m)} #密鑰長度
        for i in range(len(s)): 
            for j in range(len(s[i])-1):
                Key[int(s[i][j])]=int(s[i][j+1]) #密鑰字典
                antiKey[int(s[i][j+1])]=int(s[i][j]) #反密鑰字典
                temp.append(int(s[i][j])) #鑰匙收錄
            Key[int(s[i][-1])]=int(s[i][0]) #解決最后一個的問題
            antiKey[int(s[i][0])]=int(s[i][-1])
            temp.append(int(s[i][-1]))
        sameKey=lenKey-set(temp) #找到?jīng)]有變化的密鑰
        for i in sameKey:
            Key[i]=i
            antiKey[i]=i
        self.__key.append(Key)
        self.__key.append(antiKey)
    def enCode(self,p): #加密函數(shù)
        self.__apaMsg=p
        m=self.__m
        n=self.__n
        Key=self.__key[0]
        p=p.replace(' ','') #去除空格
        p+=' '*(m-len(p)%m) #末尾補(bǔ)齊
        n=len(p)//m #矩陣列數(shù)
        self.__n=n
        M=[p[i*m:(i+1)*m] for i in range(n)] #矩陣生成
        M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)] #矩陣轉(zhuǎn)換
        M=''.join(M) #列表轉(zhuǎn)換為字符串
        self.__secMsg=M
        return M
    def deCode(self,q):
        self.__apaMsg=p
        m=self.__m
        n=self.__n
        Key=self.__key[1]
        M=[q[i*m:(i+1)*m] for i in range(n)]
        M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)]
        M=''.join(M)
        self.__secMsg=M
        return M
    def Print(self):
        print(self.__m,self.__n,self.__key,self.__apaMsg,self.__secMsg)
if __name__=='__main__':
    m=6
    p="Beijing 2008 Olympic Games"
    s='(143)(56)'
    a=colCode(m)
    a.getKey(s)
    q=a.enCode(p)
    e=a.deCode(q)
    a.Print()
def main():
    pass

以上就是python密碼學(xué)列置換密碼學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于python密碼學(xué)列置換密碼的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python的“二維”字典 (two-dimension dictionary)定義與實(shí)現(xiàn)方法

    Python的“二維”字典 (two-dimension dictionary)定義與實(shí)現(xiàn)方法

    這篇文章主要介紹了Python的“二維”字典 (two-dimension dictionary)定義與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python模擬實(shí)現(xiàn)類似二維數(shù)組形式的二維字典功能,需要的朋友可以參考下
    2016-04-04
  • 詳解Python裝飾器

    詳解Python裝飾器

    這篇文章主要介紹了Python裝飾器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 深入解析Python中占位符%的使用方法

    深入解析Python中占位符%的使用方法

    在Python中,%占位符是一種強(qiáng)大的工具,用于格式化字符串,本文將深入解析Python中占位符的使用方法,包括字符串格式化、數(shù)字格式化、日期格式化等多個方面,需要的可以參考下
    2023-12-12
  • 一個簡單的python爬蟲程序 爬取豆瓣熱度Top100以內(nèi)的電影信息

    一個簡單的python爬蟲程序 爬取豆瓣熱度Top100以內(nèi)的電影信息

    這篇文章主要為大家詳細(xì)介紹了一個簡單的python爬蟲程序,爬取豆瓣熱度Top100以內(nèi)的電影信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python3 queue隊(duì)列模塊詳細(xì)介紹

    Python3 queue隊(duì)列模塊詳細(xì)介紹

    queue是python中的標(biāo)準(zhǔn)庫,俗稱隊(duì)列。這篇文章給大家介紹了Python3 queue隊(duì)列模塊,包括模塊中的常用方法及構(gòu)造函數(shù),需要的朋友參考下吧
    2018-01-01
  • 解讀! Python在人工智能中的作用

    解讀! Python在人工智能中的作用

    這篇文章主要幫助大家解讀Python在人工智能中的作用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • python實(shí)現(xiàn)批量按比例縮放圖片效果

    python實(shí)現(xiàn)批量按比例縮放圖片效果

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量按比例縮放圖片效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python對切片命名的實(shí)現(xiàn)方法

    Python對切片命名的實(shí)現(xiàn)方法

    在本篇文章里我們給大家分享了關(guān)于Python對切片命名的實(shí)現(xiàn)方法的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2018-10-10
  • 如何使用python爬取知乎熱榜Top50數(shù)據(jù)

    如何使用python爬取知乎熱榜Top50數(shù)據(jù)

    主要是爬取知乎熱榜的問題及點(diǎn)贊數(shù)比較高的答案,通過requests請求庫進(jìn)行爬取,對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09
  • python將字符串list寫入excel和txt的實(shí)例

    python將字符串list寫入excel和txt的實(shí)例

    今天小編就為大家分享一篇python將字符串list寫入excel和txt的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

长寿区| 南平市| 巴东县| 湟源县| 城口县| 南漳县| 天台县| 永善县| 连江县| 织金县| 丰镇市| 建阳市| 揭阳市| 宣化县| 福清市| 新疆| 五原县| 阳谷县| 定西市| 河曲县| 绥棱县| 信宜市| 炎陵县| 衡阳县| 嵊泗县| 全椒县| 驻马店市| 大同县| 五家渠市| 喀喇沁旗| 朔州市| 洛隆县| 西林县| 清河县| 定安县| 东至县| 互助| 日喀则市| 安阳市| 任丘市| 奉新县|