传统加密技术——置换加密(Py2.7实现)
来源:互联网 发布:爆伤和黄字算法 编辑:程序博客网 时间:2024/06/06 08:53
传统加密技术——置换加密(Py2.7实现)
不同于将明文代替为密文字母,置换加密是一种对明文进行置换,这种密码为置换密码。
最简单的置换例子是栅栏技术,按照对角线的顺序写出明文,按行的顺序读出作为密文,例如深度为2的栅栏技术加密信息‘meet me after the toga party’可以加密为:
加密后的信息为:MEMATRHTGPRYETEFETEOAAT
更复杂一个方案就是把消息一行一行的写成矩形块,然后按列读出,但是把列的读出次序打乱(明文本身不变),列的次序就是算法的密钥。如:
要是想要密文更难被分析,可以将密文在进行一次相同方式的列变换,二次变换后的密文更无规律性,从而更安全。
以下就是用Py2.7实现的置换算法的代码,有详细的注释,就不多解释了。
# -*- coding: utf-8 -*-"""Created on Mon Sep 25 20:16:46 2017@author: liang"""import numpy as np#判断输入是否合法的函数def is_legal_input(txt,m,n,key): if m*n<len(txt) or len(key)!=n: return False else: return True#索引变换函数,将秘钥转换为输出/插入的索引列def index_exchange(n): output_index=range(0,n) for i in range(0,n): #将密钥与输出序列相对应 for j in range(0,n): if(key[j]>key[i]): key[j],key[i]=key[i],key[j] output_index[j],output_index[i]=output_index[i],output_index[j] print output_index return output_index#加密返回密文def encryption(txt,m,n,key):#txt为明文,m行n列的转化矩阵,key为加密秘钥 arr=np.empty((m,n),dtype=np.character) #1.分离 index=0 for i in range(0,m): for j in range(0,n): if index<len(txt): arr[i,j]=txt[index] index+=1 else: print 'depart complete' print arr #2.转换 output_index=index_exchange(n) #3.输出 ciphertext=[] for i in output_index: print arr[:,i] for j in range(0,4): ciphertext.append(arr[j,i]) #密文 return ciphertext#解密并返回def decode(txt,m,n,key): arr=np.zeros((m,n),dtype=np.character) output_index=index_exchange(n) #将密文插入 index=0 for insert_index in output_index: for i in range(0,m): arr[i,insert_index]=txt[index] index+=1 return arr#测试方法plaintext='attackpostponeduntiltwoamxyz'key=[4,3,1,2,5,6,7]#秘钥if is_legal_input(plaintext,4,7,key)==True: #二次加密 s=encryption(plaintext,4,7,key) key=[4,3,1,2,5,6,7] s2=encryption(s,4,7,key) #解密 key=[4,3,1,2,5,6,7]#秘钥 arr_plain=decode(s,4,7,key) #二次解密 key=[4,3,1,2,5,6,7] arr_plain_01=decode(s2,4,7,key) #将第一次解密的信息转化为字符串形式 arr_plain_temp=[] for i in range(0,4): for j in range(0,7): arr_plain_temp.append(arr_plain_01[i][j]) key=[4,3,1,2,5,6,7] arr_plain_02=decode(arr_plain_temp,4,7,key) print s,s2,arr_plain,arr_plain_01,arr_plain_02
以上方法只是置换算法的简单实现,仅供参考。
阅读全文
1 0
- 传统加密技术——置换加密(Py2.7实现)
- 传统加密技术
- 密码编码学初探——传统加密技术
- delphi 加密(置换)
- Java加密技术(一)——加密介绍
- 利用playfair置换实现密钥加密
- C实现加密技术
- C实现加密技术
- 置换加密法
- 常用的加密解密技术之——【加密原理】
- 一步一步教你加密解密技术——加密软件
- VC实现SMC加密技术
- ASP.NET温故而知新学习系列之加密解密技术—对称算法加密(一)
- C语言双重置换加密
- Java—实现AES加密
- Java加密技术——对称加密与非对称加密
- Java加密技术(三)—— HMACSHA1 加密算法
- Java加密技术(八)——数字证书
- 看唐僧如何玩转PMP
- IONIC 表单标签的使用
- 【Spring in action】基于Java配置SpringMVC中使用Spring及SpringMVC各种请求详解
- 浅谈区块链技术
- 257. Binary Tree Paths
- 传统加密技术——置换加密(Py2.7实现)
- tensorflow 模型的持久化
- 自己动手写一个简单的MVC框架(第二版)
- Springmvc+Mybatis整合及api接口编写demo
- 关于响应式布局
- new和数组
- vue之路——单页面管理系统
- mac查看sshkey
- Swift开发:修改app程序图标