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

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

 更新時間:2022年05月24日 08:41:46   作者:Jarrycow  
這篇文章主要為大家介紹了python密碼學(xué)周期置換密碼的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

周期置換密碼

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

加密解密過程

周期置換密碼是將明文p串按固定長度m分組.然后對每組中的子串按1,2…,m的某個置換重新排列位置從而得到密文,其中密鑰σ包含分組長度信息。

解密時同樣對密文c按長度m分組,并按σ的逆置換σ-1把每組子串重新排列位置從而得到明文p。

以例3.3為例

和上次提及的列置換密碼類似

代碼

import re
class timeCode:
    __key=[] # 密鑰
    __apaMsg="" # 明文
    __secMsg="" #密文
    __lenKey=0 #密鑰長度 周期值
    def getKey(self,s): # 密鑰形成函數(shù)
        Key={}
        antiKey={}
        s=re.split(r'[()]',s) #以()分界
        while '' in s: # 消除''
            s.remove('')
        temp=[]
        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]))
        maxtemp=max(temp) #密鑰長度
        self.__lenKey=maxtemp
        lenKey={i+1 for i in range(maxtemp)} 
        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
        Key=self.__key[0]
        time=self.__lenKey
        p=p.replace(' ','') #去除空格
        if len(p)%time != 0:
            p+=' '*(time-len(p)%time) #末尾補齊
        n=len(p)//time
        M=[p[i*time:(i+1)*time] for i in range(n)] #分組生成
        M=[M[i][Key[j+1]-1] for i in range(n) for j in range(time)] #矩陣轉(zhuǎn)換
        M=''.join(M) #列表轉(zhuǎn)換為字符串
        self.__secMsg=M
        return M
    def deCode(self,q):
        self.__apaMsg=p
        m=self.__lenKey
        n=len(q)//m
        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.__key,self.__apaMsg,self.__secMsg,self.__lenKey)
s='(15623)'
p='State Key Laboratory of Networking and Switching'
a=timeCode()
a.getKey(s)
q=a.enCode(p)
a.deCode(q)
a.Print()

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

相關(guān)文章

最新評論

滨州市| 筠连县| 天台县| 汕头市| 永靖县| 息烽县| 鹿邑县| 玉环县| 昌平区| 永胜县| 壶关县| 阿瓦提县| 玛纳斯县| 阳城县| 遵义市| 龙泉市| 蒙城县| 普洱| 田东县| 新兴县| 金华市| 太保市| 牙克石市| 昌都县| 齐齐哈尔市| 南木林县| 饶阳县| 建湖县| 北碚区| 青龙| 婺源县| 和平县| 郴州市| 高州市| 都兰县| 尼玛县| 中卫市| 高阳县| 彰化县| 丽江市| 泗水县|