【数据加密】古典密码Playfair

news2024/11/24 17:49:51

文章目录

    • 一、引言
      • 1、主要任务
      • 2、分支
      • 3、密码体制分类
      • 4、攻击密码系统
    • 二、普莱费厄体制
      • 1、构造字母表,设为密钥矩阵
      • 2、设立加密方法
      • 3、加密解密
      • 4、字典集合
      • 5、结果

一、引言

1、主要任务

解决信息的保密性和可认证问题,保证信息在生成、传递、处理、保存的过程中,不被未授权者非法地提取、篡改、删除、重放和伪造等。

2、分支

  • (1)密码编码学
    对信息进行编码实现屏蔽信息的一门学问,目的是寻求保护信息的保密性和认证性的方法。

  • (2)密码分析学
    研究分析破译密码的学问,目的是研究加密信息的破译或消息的伪造。

3、密码体制分类

  • (1)对称密码体制
    一对加密和解密算法使用的密匙相同,或实质上等同,即从一个密钥可以很容易地得出另一个密钥。
    (优点)
    具有很高的保密强度,可以达到经受GJ级破译力量的分析和攻击。一些常用的对称加密方法明显地快于任何当前可以使用的双钥加密方法。
    (简化)
    信息安全性高、加解密速度快、密文信息冗余小。
    (缺点)
    它的密匙必须通过安全可靠的途径传输,密钥管理或为影响系统安全性的关键因素,使他难以满足系统的开放性要求。

  • (2)非对称加密体制
    加密和解密算法使用的密钥不同,而且对于非授权者来说,他很难从一个密钥得到另一个密钥。
    (优点)
    增加了私钥的安全性,密钥管理问题相对简单,可适用于开放性环境。
    (简化)
    管理简便、代价低、数字签名和认证。
    (缺点)
    保密强度的人为控制力度不如对称密码体制的水平,且加密速度也不如单钥加密算法快,尤其是数据量较大时。

  • (3)混合加密体制
    在这里插入图片描述

4、攻击密码系统

  • (1)穷举法
    对截收到的密文依次用各种可解的密钥试译,直到得到有意义的明文;或在不变密钥下,对所有可能的明文加密直到与截获密文一致为止。

  • (2)分析法
    在这里插入图片描述

二、普莱费厄体制

在这里插入图片描述

1、构造字母表,设为密钥矩阵

  • 密钥矩阵

以Char字符中33~122为例

在这里插入图片描述

  • 代码
	// char字符值范围
	private int MIN = 33, MAX = 122;
	// 密匙数组的规格
	private int X = 10, Y = 9;
	
	/**
	 * 生成密匙key
	 */
	public char[][] GenerateKry() {
		// 一个随机数,以Array_X为随机,Array_Y为自增
		// 目的减少循环出错
		char[][] key = new char[X][Y];
		// 生成数组
		for(int i = 0, z = 1;i < X; i++) {
			for(int j = 0; j < Y; j++, z++) {
				key[i][j] = (char) (32 + z);
			}
		}
		// 得到随机数函数
		Random r = new Random();
		// 数组 --> 乱序密匙
		for(int i = 0 ; i < X ; i++) {
			for(int j = 0 ; j < Y ; j++) {
				// 获取两个个随机数
				int z = r.nextInt(X-1);
				int y = r.nextInt(Y-1);
				// 与 key[i][j]进行调换顺序,从而打乱二元数组
				char temp = key[i][j];
				key[i][j] = key[z][y];
				key[z][y] = temp;
			}
		}
		return key;
	}

2、设立加密方法

	// 密匙变化方向,顺时针,从左上角开始 CHANGE
	private int[][] CHANGE = {{-1,-1},{-1,0},{-1,1},{0,1},
			{1,1},{1,0},{1,-1},{0,-1}};
			
	public int[][] RuleDefinition() {
		// 加密规则
		int[][] rule = new int[3][2];
		// 规则一:当明文对处于同一行时,取明文字母的左边
		rule[0] = CHANGE[7];
		// 规则二:当明文对处于同一列时,取明文字母的上边
		rule[1] = CHANGE[1];
		// 规则三:当明文对既不处于同一行,又不处于同一列时,取明文字母的右下角
		rule[2] = CHANGE[4];
		return rule;
	}

3、加密解密

public String JudgeXAndY(char[][] key, char[] mwd, boolean index) {
		// 获取明文对的相对位置关系,并根据规则修改位置
		// 如果int = 0 就是同行 1就是同列 2就是不同
		int[][] x_y = new int[2][2];
		int temp = 2;
		for(int i = 0;i < X;i++) {
			for(int j = 0;j < Y;j++) {
				for(int z = 0;z < 2;z++) {
					if(key[i][j] == mwd[z]) {
						x_y[z][0] = i;
						x_y[z][1] = j;
					}
				}
			}
		}
		if(x_y[0][0] == x_y[1][0]) {
			temp = 1;
		} else if(x_y[0][1] == x_y[1][1]) {
			temp = 0;
		}
		// 获取当前规则
		int[] rule;
		if(!index) {
			rule = this.RuleDefinition()[temp];
		} else {
			rule = this.BackRuleDefinition()[temp];
		}
		x_y = this.RuleMove(x_y, temp, rule);
		return String.valueOf(key[x_y[0][0]][x_y[0][1]]) + key[x_y[1][0]][x_y[1][1]];
	}

4、字典集合

	public Map<String, String> Encryption(String plaintext) {
		// 明文加密
		// 生成一个随机密匙
		char[][] key = this.GenerateKry();
		// 明文转换
		char[] array_pl = plaintext.toCharArray();
		// 密文
		String keyText = "";
		for(int i = 0;i<array_pl.length-1;i = i+2) {
			char[] mwd = {array_pl[i],array_pl[i+1]};
			keyText += this.JudgeXAndY(key, mwd, true);
		}
		// 判断明文的位数是否为奇数
		if (array_pl.length%2 == 1) {
			keyText += array_pl[array_pl.length - 1];
		}
		// 切割密匙  key --> key1 and key2
		String compressKey = this.CompressKey(key);
		Map<String, String> map = new HashMap<String, String>();
		map.put("key", compressKey);
		map.put("key1",compressKey.substring(0,compressKey.length()/2));
		map.put("key2",compressKey.substring(compressKey.length()/2,compressKey.length()));
		map.put("keyText", keyText);
		return map;
	}

5、结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Swin-Transformer详解

Swin-Transformer详解 0. 前言1. Swin-Transformer结构简介2. Swin-Transformer结构详解2.1 Patch Partition2.2 Patch Merging2.3 Swin Transformer Block2.3.1 W-MSA2.3.2 SW-MSA 3. 模型配置总结 0. 前言 Swin-Transformer是2021年微软研究院发表在ICCV上的一篇文章&#x…

数据的存储(浮点型)

目录 浮点型存储的规则 1.前面我们已经学过了整形在数据中的存储是以原码&#xff0c;反码&#xff0c;补码的形式在内存中存储的&#xff0c;那么浮点数是以什么样的形式存储的呢&#xff1f; 接下来我们通过一段代码来观察——> int main() {int n 9;float* p (float*…

String AOP的使用

面向切面编程&#xff0c;面向特定方法编程&#xff0c;以方法为对象&#xff0c;在不修改原方法的基础上&#xff0c;对方法进行操作扩展等&#xff0c;底层是通过动态代理实现的 使用开发步骤&#xff1a; 1、创建一个类&#xff0c;加上Aspect声明为一个AOP切面类&#xff…

2023 重新开始

感觉搞 IT 的日子最近都有点不太好过。 早上接到公司电话说今天是一个大日子。 为什么是大日子&#xff0c;相信所有人都是懂的。这次公司将会经历一次非常大的裁员&#xff0c;很不幸也在列表中。不过感觉这个好像也没有什么关系。 因为早就在意料之中的事情&#xff0c;经历…

c语言之结构体(初阶)

目录 1&#xff1a;结构体类型的声明 2&#xff1a;结构体初始化 3&#xff1a;结构体成员访问 4&#xff1a;结构体传参 1&#xff1a;结构体类型的声明 1&#xff1a;为啥要有结构体&#xff0c;因为当我们描述一个复杂对象的时候&#xff0c;可能平时我们的一个类型不能…

常见的五种排序

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

批量提取某音视频文案(二)

牙叔教程 简单易懂 之前写过一篇 批量提取某音视频文案 , 在之前的教程中, 我用的是微软的语音转文字功能, 今天我们换个方法, 使用 逗哥配音 的 文案提取 功能 准备工作 下载视频和音频 我在github找到的是这个仓库 https://github.com/Johnserf-Seed/TikTokDownload 注意一…

VLANIF虚接口案例实践

1&#xff09;拓扑 2&#xff09;需求&#xff1a; -所有PC能够ping通自己的网关 -实现vlan间互通&#xff0c;实现所有的PC互通 3&#xff09;配置步骤&#xff1a; 第一步&#xff1a;给pc配置IP地址 第二步&#xff1a;交换机创建vlan,做access和trunk -所有的交换机都配…

传统图形学对nerf的对比与应用落地

作者今年参加了China3DV的盛会&#xff0c;大会的发表、线下讨论、学者、工业界等等的交流着实对于Nerf有了更深的思考&#xff0c;以下是作者的抛砖引玉&#xff0c;如有不当之处敬请指出~ 传统图形学与nerf的简介&#xff1a; 传统图形学&#xff1a;显示表达几何表达方式&…

【CloudCompare教程】010:点云的裁剪功能(分段、裁剪、筛选)

本文讲解CloudCompare点云的裁剪功能(分段、裁剪、筛选)。 文章目录 一、点云的分段二、点云的裁剪三、点云的筛选一、点云的分段 加载案例点云数据,如下图所示: 选中图层点云,点击工具栏中的【分割】工具。 点击【激活线状选择】工具: 在需要裁剪的点云上绘制现状裁剪范…

使用免费的SSL证书将nginx配置的普通网站修改为HTTPS网站

一、需求说明 已经在Centos8系统中使用nginx搭建了网站;但是该网站没有实现HTTPS协议不安全;现需要将网站升级为HTTPS站点。 Linux环境对Nginx开源版源码下载、编译、安装、开机自启https://blog.csdn.net/xiaochenXIHUA/article/details/130265983?spm=1001.2014.3001.5501

chatgpt赋能python:Python交易接口简介

Python交易接口简介 Python作为一种高级编程语言&#xff0c;被广泛用于各种不同的领域&#xff0c;其中包括金融市场交易。Python交易接口提供了一种优雅而简单的方式&#xff0c;使得交易者能够方便地执行自己的交易策略。 什么是Python交易接口&#xff1f; Python交易接…

Effective第三版 中英 | 第2章 创建和销毁对象 | 考虑静态工厂方法而不是构造函数

文章目录 Effective第三版第2章 创建和销毁对象前言考虑静态工厂方法而不是构造函数 Effective第三版 第2章 创建和销毁对象 前言 大家好&#xff0c;这里是 Rocky 编程日记 &#xff0c;喜欢后端架构及中间件源码&#xff0c;目前正在阅读 effective-java 书籍。同时也把自己…

基于SSM的人才招聘网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

模拟实现库函数:strcpy

目录 通过cplusplus网站了解函数功能&#xff1a; 断言assert的使用&#xff1a; 关于const&#xff1a; 本篇你最应该了解的内容&#xff1a; 通过cplusplus网站了解函数功能&#xff1a; 要模拟实现库函数&#xff0c;首先我们需要了解这个函数的参数&#xff0c;函数的…

主机加固介绍

最近公司做服务器安全&#xff0c;开始在市场了解产品&#xff0c;对这一块算是短暂的研究了一段时间&#xff0c;有一点心得给大家分享一下。 主机加固 最近主机加固的概念被炒得火热&#xff0c;主机加固的功能也正在被致力于服务器安全的相关人士所关注。 那么究竟什么是主…

【CVPR2022】CSWin Transformer详解

【CVPR2022】CSWin Transformer详解 0. 引言1. 网络结构2. 创新点2.1 Cross-Shaped Window Self-Attention2.2 Locally-Enhanced Positional Encoding(LePE) 3. 实验总结 0. 引言 Transformer设计中一个具有挑战性的问题是&#xff0c;全局自注意力的计算成本非常高&#xff0…

chatgpt赋能python:Python代码怎么敲:了解Python编程语言

Python代码怎么敲&#xff1a;了解Python编程语言 Python是一种高级编程语言&#xff0c;具有易读易用和高效性等优点。这使得Python成为了程序员的最佳选择&#xff0c;并成为了广泛应用于机器学习、Web开发、数据分析等领域。 Python代码敲法&#xff1a;小技巧 Python代码…

chatgpt赋能python:Python主要语句介绍

Python主要语句介绍 Python是一种广泛使用的高级编程语言&#xff0c;其语法简介、易于学习&#xff0c;并有丰富的库和工具支持。在Python中&#xff0c;主要的语句可以帮助开发人员快速编写代码&#xff0c;实现各种各样的任务。在本文中&#xff0c;我们将介绍Python中的主…

性能优化之高Log file sync等待实战案例分享

故障情况 AWR报告如下&#xff1a; 之后他们把大部分业务停掉后&#xff0c;Log file sync等待事件还是非常高。 通过对比昨天跟今天相同时间的AWR&#xff0c;在业务量小非常多的情况&#xff0c;等待时间还是高非常大。 诊断过程 log file sync等待事件首先判断当前系统IO…