代换密码(Substitution Cipher)

转载请著明出处

定义

令P=C=Z26,K是由26个数字0,1,…25的所有可能的置换组成,对任意的π∈K,定义eπ(x)=π(x)和dπ(y)=π-1(y),这里的π-1表示置换π的逆置换。

与上一节移位密码相比,移位密码的加密和解密都是代数运算,但是在代换密码的情形下,可简单将加密和解密过程直接看做是一个字母表上的置换。

因为代换密码比较简单,将不做过多的介绍,需要注意的是代换密码的秘钥空间大小是26!>4.0×1026是一个很大的数,因此采用暴力攻击方式即使在计算机上也是不可能的,但是并不是说代换密码不可被破解,使用其他的密码分析方法,代还密码还是可以被攻破。

举个栗子

试用代换密码加密下列明文:

we will meet at midnight,

其中π在Z26上的置换如下

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
π(x) 23 13 24 0 7 15 14 6 25 16 22 1 19 18 5 11 17 2 21 12 20 4 10 9 3 8

先从如下字母表中获得每个字母对应的数字

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

可得到:

22 4 22 8 11 11 12 4 4 19 0 19 12 8 3 13 8 6 7 19

从置换中可得密文数为:

10 7 10 25 1 1 12 7 7 12 23 12 19 28 0 18 28 14 6 12

从字母表中检索可得密文为:

KHKZ BBTH HMXM TZAS ZOGM

代码实现

package com.slp.cryptography;import java.util.Arrays;/*** @ClassName SubstitutionCipher* @Description 代换密码* @Author sanglp* @Date 2020/11/30 11:24* @Version 1.0**/
public class SubstitutionCipher {static  int[] arr = {23,13,24,0,7,15,14,6,25,16,22,1,19,18,5,11,17,2,21,12,20,4,10,9,3,8};static  int[] arr2 = new int[26];public static void main(String[] args) {init();enCrypt("wewillmeetatmidnight");deCrypt("KHKZBBTHHMXMTZASZOGM");}/*** 加密 代还密码需要先初始化一个代换表 在此我们用数组来表示* @param resource*/private static void enCrypt(String resource){char[] chararr = resource.toUpperCase().toCharArray();StringBuilder result = new StringBuilder();for(int i=0;i<chararr.length;i++){result.append( (char) ('A'+arr[chararr[i]-'A']));}System.out.println(result);}/*** 解密* @param resource*/private static void deCrypt(String resource){char[] chararr = resource.toUpperCase().toCharArray();StringBuilder result = new StringBuilder();for(int i=0;i<chararr.length;i++){result.append( (char) ('A'+arr2[chararr[i]-'A']));}System.out.println(result);}/*** 初始化逆置换矩阵*/private static void init(){for(int i=0;i<26;i++){arr2[arr[i]]=i;}System.out.println(Arrays.toString(arr2));}
}

【密码学原理与实践】(二)代换密码 符java代码实现相关推荐

  1. 【密码学原理与实践】(三)仿射密码 符java代码实现

    仿射密码(Affine Cipher) 转载请著明出处 仿射密码是代换密码的一种特殊情况. 在学习仿射密码之前我们首先需要了解几个定理 定理 同余方程唯一解定理 设a ∈ Zm,对任意的b∈Zm,同余 ...

  2. 【密码学原理与实践】(四)维吉尼亚密码 符java代码实现

    维吉尼亚密码(Vigenere Cipher) 转载请著明出处 无论是移位密码还是代换密码,一旦秘钥被选定,则每个字母对应的数字都被加密变换成对应的唯一数字.我们称这种为单表代换密码,而本篇讲的是一种 ...

  3. 【运筹优化】结合天际线启发式的蚁群算法求解二维矩形装箱问题 + Java代码实现

    文章目录 一.天际线启发式 二.蚁群算法结合天际线启发式 2.1 构建序列 2.1.1 思路一 2.1.2 思路二 2.1.3 思路N 三.Java代码实现 3.1 项目结构 3.2 Ant 3.3 ...

  4. 【密码学原理与实践】(六)置换密码 符java代码实现

    置换密码 置换密码与前面的代换密码是不一样的,置换密码是保持明文的所有字母不变,只是利用置换打乱了明文字母的位置和次序. 首先需要明白,置换既是单射又是满射 定义 令m为一正整数,P=C= ( Z 2 ...

  5. 密码学原理与实践第三版pdf_喜报!Nervos 研究员 Alan 论文被国际密码学顶会欧密会收录...

    近日,Nervos 基金会密码学研究员 Alan Szepieniec 的论文<Transparent SNARKs from DARK Compilers>被国际密码学顶会欧密会收录,同 ...

  6. 密码学原理与实践_到底什么是防火墙入侵检测密码学身份认证?如何高效建立网络安全知识体系?...

    今天杰哥给大家推荐一本新的书籍,名字叫做<网络安全原理与实践>,这本书有一定的阅读门槛,不是一本面向新手或新人的书籍,至少需要你具备网络基础的功底,例如已学习并掌握了我前面推荐的两本书了. ...

  7. Linux 快照 (snapshot) 原理与实践(二) 快照功能实践

    文章目录 0. 概要 1. 准备演示数据 2. 创建 snapshot-origin 目标 3. 创建 snapshot 目标 4. 验证 COW 操作 4.1 第一次写数据 4.2 第二次写数据 5 ...

  8. 密码学原理与实践第三版pdf_云计算原理与实践PDF电子书下载

    今天分享的电子书是<云计算原理与实践>PDF电子书下载 本书细节 书名:<云计算原理与实践> 作者:王伟主编:郭栋,张礼庆,邱娟,张静轩,张东启,谭一鸣编著 出版时间:2018 ...

  9. 《密码学原理与实践》 第一章 古典密码学

    1.1 几个简单的密码体制 密码的数学定义 1.1.1 移位密码(shift cipher) 一个实用的加密体制,必须满足下面两点: 1. 加密函数e(k)和解密函数d(k)都应该易于计算 2. 对任 ...

最新文章

  1. mysql5.6创建用户并授予指定数据库或表权限
  2. 阿里云服务器怎么安装docker
  3. 毕业5年,我是怎么成为年薪30W的运维工程师
  4. Nagios(页面)报错: Return code of 13 is out of bounds
  5. Hadoop实战-中高级部分 之 Hadoop 集群安装
  6. python 科学计算及数据可视化
  7. java threadlocal 缺点_Java的ThreadLocal如何在后台实现?
  8. 【转】测试用例编写(功能测试框架)
  9. day01函数的重载
  10. 计算机网络安全讲座心得,网络安全知识培训心得体会
  11. CIS芯片测试到底怎么测?
  12. 单片机定时器程序c语言,单片机定时器程序
  13. 华为、中兴、大亚等光猫或路由器DDNS设置方法
  14. python字典保存为文件_关于python:如何将字典列表保存到文件中?
  15. Vue——May(1)
  16. 多部分元件原理图封装的画法
  17. Play framework session和flash有效范围
  18. 基于51单片机电热水壶自动加热水温控制系统(源程序+仿真+论文)
  19. 用js写一个身份证号码籍贯
  20. MySQL数据库之完整性约束实体完整性用户定义完整性

热门文章

  1. 设置 linux 命令别名
  2. Google高级搜索技巧
  3. vnc linux新用户,realvnc linux,realvnc linux配置的8个步骤
  4. ubuntu解压各种压缩文件方法
  5. 用电脑自带的画图工具画E-R图
  6. C++重载函数使用(使用重载函数分别完成求2个整数、3个整数、4个整数的最大值。)
  7. 一个 knx 网关拆机
  8. echarts 折线图 + 柱状图
  9. 对称图像输出问题(for循环 ,取绝对值的利用)
  10. 学习笔记26-- 在solidwork里面绘制世界环境,制作成gazebo的.world世界文件基本方法