【密码学原理与实践】(二)代换密码 符java代码实现
代换密码(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代码实现相关推荐
- 【密码学原理与实践】(三)仿射密码 符java代码实现
仿射密码(Affine Cipher) 转载请著明出处 仿射密码是代换密码的一种特殊情况. 在学习仿射密码之前我们首先需要了解几个定理 定理 同余方程唯一解定理 设a ∈ Zm,对任意的b∈Zm,同余 ...
- 【密码学原理与实践】(四)维吉尼亚密码 符java代码实现
维吉尼亚密码(Vigenere Cipher) 转载请著明出处 无论是移位密码还是代换密码,一旦秘钥被选定,则每个字母对应的数字都被加密变换成对应的唯一数字.我们称这种为单表代换密码,而本篇讲的是一种 ...
- 【运筹优化】结合天际线启发式的蚁群算法求解二维矩形装箱问题 + Java代码实现
文章目录 一.天际线启发式 二.蚁群算法结合天际线启发式 2.1 构建序列 2.1.1 思路一 2.1.2 思路二 2.1.3 思路N 三.Java代码实现 3.1 项目结构 3.2 Ant 3.3 ...
- 【密码学原理与实践】(六)置换密码 符java代码实现
置换密码 置换密码与前面的代换密码是不一样的,置换密码是保持明文的所有字母不变,只是利用置换打乱了明文字母的位置和次序. 首先需要明白,置换既是单射又是满射 定义 令m为一正整数,P=C= ( Z 2 ...
- 密码学原理与实践第三版pdf_喜报!Nervos 研究员 Alan 论文被国际密码学顶会欧密会收录...
近日,Nervos 基金会密码学研究员 Alan Szepieniec 的论文<Transparent SNARKs from DARK Compilers>被国际密码学顶会欧密会收录,同 ...
- 密码学原理与实践_到底什么是防火墙入侵检测密码学身份认证?如何高效建立网络安全知识体系?...
今天杰哥给大家推荐一本新的书籍,名字叫做<网络安全原理与实践>,这本书有一定的阅读门槛,不是一本面向新手或新人的书籍,至少需要你具备网络基础的功底,例如已学习并掌握了我前面推荐的两本书了. ...
- Linux 快照 (snapshot) 原理与实践(二) 快照功能实践
文章目录 0. 概要 1. 准备演示数据 2. 创建 snapshot-origin 目标 3. 创建 snapshot 目标 4. 验证 COW 操作 4.1 第一次写数据 4.2 第二次写数据 5 ...
- 密码学原理与实践第三版pdf_云计算原理与实践PDF电子书下载
今天分享的电子书是<云计算原理与实践>PDF电子书下载 本书细节 书名:<云计算原理与实践> 作者:王伟主编:郭栋,张礼庆,邱娟,张静轩,张东启,谭一鸣编著 出版时间:2018 ...
- 《密码学原理与实践》 第一章 古典密码学
1.1 几个简单的密码体制 密码的数学定义 1.1.1 移位密码(shift cipher) 一个实用的加密体制,必须满足下面两点: 1. 加密函数e(k)和解密函数d(k)都应该易于计算 2. 对任 ...
最新文章
- mysql5.6创建用户并授予指定数据库或表权限
- 阿里云服务器怎么安装docker
- 毕业5年,我是怎么成为年薪30W的运维工程师
- Nagios(页面)报错: Return code of 13 is out of bounds
- Hadoop实战-中高级部分 之 Hadoop 集群安装
- python 科学计算及数据可视化
- java threadlocal 缺点_Java的ThreadLocal如何在后台实现?
- 【转】测试用例编写(功能测试框架)
- day01函数的重载
- 计算机网络安全讲座心得,网络安全知识培训心得体会
- CIS芯片测试到底怎么测?
- 单片机定时器程序c语言,单片机定时器程序
- 华为、中兴、大亚等光猫或路由器DDNS设置方法
- python字典保存为文件_关于python:如何将字典列表保存到文件中?
- Vue——May(1)
- 多部分元件原理图封装的画法
- Play framework session和flash有效范围
- 基于51单片机电热水壶自动加热水温控制系统(源程序+仿真+论文)
- 用js写一个身份证号码籍贯
- MySQL数据库之完整性约束实体完整性用户定义完整性