返回顶部
首页 > 资讯 > 后端开发 > Python >python如何实现列置换密码
  • 740
分享到

python如何实现列置换密码

2023-06-30 15:06:46 740人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了python如何实现列置换密码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python如何实现列置换密码文章都会有所收获,下面我们一起来看看吧。过程加密过程将明文p以设定的固定分组宽度m按行

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

    过程

    加密过程

    • 将明文p以设定的固定分组宽度m按行写出,即每行有m个字符;若明文长度不是m的整数倍,则不足部分用双方约定的方式填充,如双方约定用空格代替空缺处字符,不妨设最后得字符矩阵[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为例

    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如何实现列置换密码”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网Python频道。

    --结束END--

    本文标题: python如何实现列置换密码

    本文链接: https://lsjlt.com/news/330005.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • python如何实现列置换密码
      这篇文章主要介绍了python如何实现列置换密码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python如何实现列置换密码文章都会有所收获,下面我们一起来看看吧。过程加密过程将明文p以设定的固定分组宽度m按行...
      99+
      2023-06-30
    • python密码学列置换密码学习
      目录列置换密码过程加密过程解密过程说明完整代码列置换密码 参考教材:《现代密码学教程》P46 3.1.1 过程 加密过程 将明文p以设定的固定分组宽度m按行写出,即每行有m个字符;若...
      99+
      2024-04-02
    • python换位密码及换位解密转置加密怎么实现
      这篇文章主要介绍了python换位密码及换位解密转置加密怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python换位密码及换位解密转置加密怎么实现文章都会有所收获,下面我们一起来看看吧。换位密码Tra...
      99+
      2023-06-30
    • python如何实现凯撒密码
      小编给大家分享一下python如何实现凯撒密码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在密码学中,凯撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。这个加密方法是...
      99+
      2023-06-14
    • python密码学周期置换密码学习
      目录周期置换密码加密解密过程代码周期置换密码 参考教材:《现代密码学教程》P47 3.1.2 加密解密过程 周期置换密码是将明文p串按固定长度m分组.然后对每组中的子串按1,2&he...
      99+
      2024-04-02
    • python如何实现凯撒密码加密解密
      这篇文章主要介绍了python如何实现凯撒密码加密解密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python如何实现凯撒密码加密解密文章都会有所收获,下面我们一起来看看吧。凯撒加密就是通过将字母移动一定的位...
      99+
      2023-07-02
    • python密码学换位密码及换位解密转置加密教程
      目录换位密码示例代码解释输出Pyperclip代码输出解释解密转置密码的步骤代码说明输出换位密码 Transposition Cipher是一种加密算法,其中明文中的字母顺序被重新排...
      99+
      2024-04-02
    • python中如何实现代码换行
      这篇“python中如何实现代码换行”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“python中如何实现代码换行”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让...
      99+
      2023-06-06
    • python一次性密码如何实现
      今天小编给大家分享一下python一次性密码如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一次性密码密码一次性密码密...
      99+
      2023-06-30
    • python如何实现Excel多行多列的转换
      今天小编给大家分享一下python如何实现Excel多行多列的转换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、使用需求...
      99+
      2023-07-05
    • python如何实现三次密码验证
      小编给大家分享一下python如何实现三次密码验证,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化...
      99+
      2023-06-14
    • php如何实现密码加密
      这篇文章给大家分享的是有关php如何实现密码加密的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php密码加密方法:1、使用password_hash(),语法“password_hash(密码,PASSWORD_...
      99+
      2023-06-20
    • vuejs如何实现密码加密
      这篇文章主要为大家展示了“vuejs如何实现密码加密”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vuejs如何实现密码加密”这篇文章吧。vuejs实现密码加密的方法:1、通过npm引入“cry...
      99+
      2023-06-25
    • Linux mysql-5.6如何实现重置root密码
      检查mysql服务是否启动,如果启动,关闭mysql服务 运行命令:ps -ef | grep -i mysql 如果开着就运行关闭的命令:service mysqld stop 修改mysql的配置文件my....
      99+
      2022-05-21
      Linux mysql 重置 root密码
    • C# DataGridView行列转换如何实现
      这篇文章主要讲解了“C# DataGridView行列转换如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# DataGridView行列转换如何实现”吧!初始表...
      99+
      2023-07-05
    • vbs如何实现imail密码解密
      这篇文章主要介绍了vbs如何实现imail密码解密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:on error resume next const HKEY_LO...
      99+
      2023-06-08
    • Python移位密码、仿射变换解密实例代码
      目录前言一、移位密码二、仿射变换三、全部代码总结前言 这个代码是很久之前的,已经忘记具体的思路了,你可以结合此文章来了解两个加密方式的内容。 前两个步骤是对应加密方式的函数,第三个步...
      99+
      2024-04-02
    • Qt如何实现密码框
      这篇文章主要介绍“Qt如何实现密码框”,在日常操作中,相信很多人在Qt如何实现密码框问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Qt如何实现密码框”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!密码输入框...
      99+
      2023-07-02
    • mysql无密码如何设置密码
      mysql无密码如何设置密码?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql无密码设置密码的方法:1、使用mysq...
      99+
      2024-04-02
    • python实现凯撒密码
      在密码学中,凯撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作