周期置换密码

本文介绍了周期置换密码的加密解密过程,参照《现代密码学教程》中的内容,阐述了如何按照固定长度分组并应用置换来改变子串顺序,形成密文。同时,讨论了解密时如何使用逆置换恢复原文。文中还提到了周期置换密码与列置换密码的相似之处,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

周期置换密码

参考教材:《现代密码学教程》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): # 密钥形成函数
        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):
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
周期置换密码是一种简单的加密算法,它通过对明文进行周期性的置换来实现加密,具体步骤如下: 1. 将明文分成若干个长度为n的块,最后一个块如果不足n个字符,则在末尾补足相应的字符。 2. 定义一个长度为n的置换表,将每个块按照置换表进行置换。 3. 将置换后的块连接起来,得到密文。 解密的过程与加密相反,只需要将置换表反向使用即可。 下面是一个简单的Python实现: ```python def encrypt(plain_text, key): n = len(key) cipher_text = '' for i in range(0, len(plain_text), n): block = plain_text[i:i+n] if len(block) < n: block += ' ' * (n - len(block)) permuted_block = '' for j in range(n): permuted_block += block[key[j]-1] cipher_text += permuted_block return cipher_text def decrypt(cipher_text, key): n = len(key) plain_text = '' for i in range(0, len(cipher_text), n): block = cipher_text[i:i+n] permuted_block = '' for j in range(n): permuted_block += block[key.index(j+1)] plain_text += permuted_block return plain_text.strip() # 示例 plain_text = 'hello world' key = [5, 2, 1, 3, 4] cipher_text = encrypt(plain_text, key) print(cipher_text) # 'oelhlw lrod' decrypted_text = decrypt(cipher_text, key) print(decrypted_text) # 'hello world' ``` 在上面的示例,我们使用了一个长度为5的置换表 `[5, 2, 1, 3, 4]`,对明文进行了加密和解密。加密后的密文为 `'oelhlw lrod'`,解密后得到的明文为 `'hello world'`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值