文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python如何实现列置换密码

2023-06-30 15:36

关注

这篇文章主要介绍了python如何实现列置换密码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python如何实现列置换密码文章都会有所收获,下面我们一起来看看吧。

过程

加密过程

解密过程

说明

以例3.2为例

python如何实现列置换密码

σ=(143)(56)即每个括号里部分轮着相对应

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]))

当然,这儿σ=(143)(56)中没有2,因为2对应他自己即

2→2

所以要再单独表示

sameKey=lenKey-set(temp) #找到没有变化的密钥    for i in sameKey:        Key[i]=i        antiKey[i]=i

而加密的时候,便是把明文先变为矩阵,载根据密钥进行转换

比如本题便将矩阵第一列转换为第四列,第四列转换为第三列,第三列转换为第一列,以此类推

这里可以用生成式完成

M=[M[i][Key[j+1]-1] for i in range(n) for j in range(m)] #矩阵转换

完整代码

'''列置换密码Auher:Jarrycowtime:2020-04-17'''import reclass colCode:    __m=0    __n=0    __key=[] # 密钥    __apaMsg="" # 明文    __secMsg="" #密文    def __init__(self,m): # 初始化,定义矩阵宽        self.__m=m        __n=0        __key=[]         __apaMsg=""         __secMsg=""     def getKey(self,s): # 密钥形成函数        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) #找到没有变化的密钥        for i in sameKey:            Key[i]=i            antiKey[i]=i        self.__key.append(Key)        self.__key.append(antiKey)    def enCode(self,p): #加密函数        self.__apaMsg=p        m=self.__m        n=self.__n        Key=self.__key[0]        p=p.replace(' ','') #去除空格        p+=' '*(m-len(p)%m) #末尾补齐        n=len(p)//m #矩阵列数        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)] #矩阵转换        M=''.join(M) #列表转换为字符串        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如何实现列置换密码”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python如何实现列置换密码”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯