当前位置: 首页 > news >正文

密码学原理精解【5】

这里写目录标题

移位密码

概述

以 z 26 运算为例 , k 为密钥 加密: e k ( x ) = ( x + k ) m o d 26 解密: d k ( x ) = ( x − k ) m o d 26 以z_{26} 运算为例,k为密钥 \\加密:e_k(x)=(x+k) mod 26 \\解密:d_k(x)=(x-k) mod 26 z26运算为例,k为密钥加密:ek(x)=(x+k)mod26解密:dk(x)=(xk)mod26
实际中,我们使用 Z 256 Z_{256} Z256运算(群的加法运算)

代码

#include <iostream>
#include <fstream>
#include<cstring>using namespace std;int main(){//加密写入ofstream fileOut;char helloTxt[]{"&9*&((@#$)((%#^^hello,world!\n123456789"};int txtLen{strlen(helloTxt)};fileOut.open("hello.data",ios::binary);int k=77;for(int i=0;i<txtLen;i++){fileOut<<char((helloTxt[i]+k) %256);}fileOut.close();//解密读出ifstream fileIn;char helloChar;fileIn.open("hello.data",ios::binary);while (fileIn.get(helloChar)){cout<<char((helloChar-k) %256);}fileIn.close();}
&9*&((@#$)((%#^^hello,world!
123456789
Process returned 0 (0x0)   execution time : 0.120 s
Press any key to continue.

希尔密码( Z 256 Z_{256} Z256)

待加密长度被3整除

#include <iostream>
#include <fstream>
#include<cstring>
#include "e:/eigen/Eigen/Dense"using namespace std;
using namespace Eigen;int main(){//加密写入ofstream fileOut;char helloTxt[]{"123456789$#%(&Yoiu9"};int txtLen{strlen(helloTxt)};fileOut.open("hello.data",ios::binary);for(int i=0;i<txtLen;i+=3){Matrix<int,1,3> x{helloTxt[i],helloTxt[i+1],helloTxt[i+2]};Matrix<int,3,3> k{{16,91,215}, {171,253,50}, {8,186,121}};Matrix<int,1,3>  e_data=x*k;for (int j=0;j<3;j++){fileOut<<char(int(e_data[j]) % 256);}}fileOut.close();//解密读出ifstream fileIn;char helloChar;fileIn.open("hello.data",ios::binary);char txtBuffer[4];for(int i=0;i<txtLen;i+=3){fileIn.read(txtBuffer,3);Matrix<int,1,3> y{txtBuffer[0],txtBuffer[1],txtBuffer[2]};Matrix<int,3,3> k_ni{{9,11, 227},{101 ,152 ,37},{134 ,248 ,127}};Matrix<int,1,3> e_data=y*k_ni;for (int j=0;j<3;j++){cout<<char(int(e_data[j]) % 256);}}fileIn.close();}

待加密长度不一定被3整除

继续完善程序,针对加密长度不一定是3的倍数。

#include <iostream>
#include <fstream>
#include<cstring>
#include "e:/eigen/Eigen/Dense"using namespace std;
using namespace Eigen;int main(){//加密写入ofstream fileOut;char helloTxt[]{"123456789p"};int txtLen{strlen(helloTxt)};fileOut.open("hello.data",ios::binary);for(int i=0;i<txtLen;i+=3){if ((txtLen-i)==1){Matrix<int,1,3> x{helloTxt[i],0,0};Matrix<int,3,3> k{{16,91,215}, {171,253,50}, {8,186,121}};Matrix<int,1,3>  e_data=x*k;for (int j=0;j<3;j++){fileOut<<char(int(e_data[j]) % 256);}}else if ((txtLen-i)==2){Matrix<int,1,3> x{helloTxt[i],helloTxt[i+1],0};Matrix<int,3,3> k{{16,91,215}, {171,253,50}, {8,186,121}};Matrix<int,1,3>  e_data=x*k;for (int j=0;j<3;j++){fileOut<<char(int(e_data[j]) % 256);}}else{Matrix<int,1,3> x{helloTxt[i],helloTxt[i+1],helloTxt[i+2]};Matrix<int,3,3> k{{16,91,215}, {171,253,50}, {8,186,121}};Matrix<int,1,3>  e_data=x*k;for (int j=0;j<3;j++){fileOut<<char(int(e_data[j]) % 256);}}}fileOut.close();//解密读出ifstream fileIn;char helloChar;fileIn.open("hello.data",ios::binary);char txtBuffer[4];for(int i=0;i<txtLen;i+=3){fileIn.read(txtBuffer,3);Matrix<int,1,3> y{txtBuffer[0],txtBuffer[1],txtBuffer[2]};Matrix<int,3,3> k_ni{{9,11, 227},{101 ,152 ,37},{134 ,248 ,127}};Matrix<int,1,3> e_data=y*k_ni;char d_data[3];for (int j=0;j<3;j++){d_data[j]=char(int(e_data[j]) % 256);}if ((txtLen-i)==2 ){cout<<d_data[0]<<d_data[1];}else if((txtLen-i)==1 ){cout<<d_data[0];}else{for (int j=0;j<3;j++){cout<<d_data[j];}}}fileIn.close();}
123456789p
Process returned 0 (0x0)   execution time : 0.376 s
Press any key to continue.

加解密文件

#include <iostream>
#include <fstream>
#include<cstring>
#include "e:/eigen/Eigen/Dense"using namespace std;
using namespace Eigen;int main(){//加密写入ifstream  picfs("test.png", ios::ate|ios::binary);// 获取文件大小std::streampos picSize = picfs.tellg();picfs.close(); // 关闭文件std::cout << "文件长度: " << picSize << " 字节" << std::endl;ifstream  ifs("test.png", ios::in|ios::binary);char *picData=new char[picSize+1];for (int i=0;i<picSize;i++){ifs.get(picData[i]);}ifs.close();int txtLen{picSize};ofstream  fileOut;fileOut.open("pic.dat",ios::binary);for(int i=0;i<txtLen;i+=3){if ((txtLen-i)==1){Matrix<int,1,3> x{picData[i],0,0};Matrix<int,3,3> k{{16,91,215}, {171,253,50}, {8,186,121}};Matrix<int,1,3>  e_data=x*k;for (int j=0;j<3;j++){fileOut<<char(int(e_data[j]) % 256);}}else if ((txtLen-i)==2){Matrix<int,1,3> x{picData[i],picData[i+1],0};Matrix<int,3,3> k{{16,91,215}, {171,253,50}, {8,186,121}};Matrix<int,1,3>  e_data=x*k;for (int j=0;j<3;j++){fileOut<<char(int(e_data[j]) % 256);}}else{Matrix<int,1,3> x{picData[i],picData[i+1],picData[i+2]};Matrix<int,3,3> k{{16,91,215}, {171,253,50}, {8,186,121}};Matrix<int,1,3>  e_data=x*k;for (int j=0;j<3;j++){fileOut<<char(int(e_data[j]) % 256);}}}fileOut.close();//解密读出ofstream deFileOut;deFileOut.open("test_d.png",ios::binary);ifstream fileIn;char helloChar;fileIn.open("pic.dat",ios::binary);char txtBuffer[4];for(int i=0;i<txtLen;i+=3){fileIn.read(txtBuffer,3);Matrix<int,1,3> y{txtBuffer[0],txtBuffer[1],txtBuffer[2]};Matrix<int,3,3> k_ni{{9,11, 227},{101 ,152 ,37},{134 ,248 ,127}};Matrix<int,1,3> e_data=y*k_ni;char d_data[3];for (int j=0;j<3;j++){d_data[j]=char(int(e_data[j]) % 256);}if ((txtLen-i)==2 ){deFileOut<<d_data[0]<<d_data[1];}else if((txtLen-i)==1 ){deFileOut<<d_data[0];}else{for (int j=0;j<3;j++){deFileOut<<d_data[j];}}}deFileOut.close();fileIn.close();delete[] picData;}

相关文章:

密码学原理精解【5】

这里写目录标题 移位密码概述代码 希尔密码( Z 256 Z_{256} Z256​)待加密长度被3整除待加密长度不一定被3整除加解密文件 移位密码 概述 以 z 26 运算为例 , k 为密钥 加密&#xff1a; e k ( x ) ( x k ) m o d 26 解密&#xff1a; d k ( x ) ( x − k ) m o d 26 以z_{…...

Unity3D 资源管理YooAsset原理分析与详解

引言 Unity3D 是一款广泛应用于游戏开发、虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;等领域的强大游戏开发引擎。在开发过程中&#xff0c;资源管理是一项至关重要的任务&#xff0c;它直接影响到游戏的性能和用户体验。YooAsset 是一个基于 Un…...

npm install puppeteer 报错 npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated解决办法

npm install puppeteer 报错如下&#xff1a; npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated. Use PUPPETEER_DOWNLOAD_BASE_URL instead. npm ERR! Error: ERROR: Failed to set up Chrome v126.0.6478.126! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to sk…...

浙大版PTA《Python 程序设计》题目集 参考答案

浙大版PTA《Python 程序设计》题目集 参考答案 本答案配套详解教程专栏&#xff0c;欢迎订阅&#xff1a; PTA浙大版《Python 程序设计》题目集 详解教程_少侠PSY的博客-CSDN博客 01第1章-1 从键盘输入两个数&#xff0c;求它们的和并输出 aint(input()) # 输入a的值 bint(…...

“拆分盘投资:机遇与风险并存

一、引言 随着互联网技术的日新月异&#xff0c;金融投资领域迎来了前所未有的变革&#xff0c;其中拆分盘作为一种新兴的投资模式&#xff0c;正逐渐进入公众的视野。其独特的价值增长逻辑和创新的投资机制&#xff0c;为投资者开辟了新的财富增值渠道。本文旨在深入探讨拆分…...

Java面试题系列 - 第2天

题目&#xff1a;Java中的线程池模型及其配置策略 背景说明&#xff1a;在Java多线程编程中&#xff0c;线程池是一种高效的线程复用机制&#xff0c;能够有效管理和控制线程的创建与销毁&#xff0c;避免频繁创建和销毁线程带来的性能开销。理解和掌握线程池的配置策略对于优…...

AGI|Transformer自注意力机制超全扫盲攻略,建议收藏!

一、前言 2017年&#xff0c;谷歌团队推出一篇神经网络的论文&#xff0c;首次提出将“自注意力”机制引入深度学习中&#xff0c;这一机制可以根据输入数据各部分重要性的不同而分配不同的权重。当ChatGPT震惊世人时&#xff0c;Transformer也随之进入大众视野。一夜之间&…...

QT+OpenCV在Android上实现人脸实时检测与目标检测

一、功能介绍 在当今的移动应用领域&#xff0c;随着技术的飞速发展和智能设备的普及&#xff0c;将先进的计算机视觉技术集成到移动平台&#xff0c;特别是Android系统中&#xff0c;已成为提升用户体验、拓展应用功能的关键。其中&#xff0c;目标检测与人脸识别作为计算机视…...

常见网络攻击方式及防御方法

1. DDOS攻击&#xff08;分布式拒绝服务攻击&#xff09; 概念&#xff1a;借助于C/S&#xff08;客户端/服务器&#xff09;技术&#xff0c;将多个计算机联合起来作为攻击平台&#xff0c;对一个或多个目标发动DDOS攻击&#xff0c;从而成倍地提高拒绝服务攻击的威力。防护方…...

使用 ESP32 实现无线对讲机功能涉及音频采集、音频传输以及音频播放等多个方面。实现无线对讲机功能的基本步骤和示例代码。

硬件准备 两个 ESP32 开发板两个 MAX9814 麦克风模块&#xff08;或其他兼容的模拟麦克风模块&#xff09;两个 MAX98357A DAC 模块&#xff08;或其他兼容的音频放大器模块&#xff09;扬声器 接线 麦克风模块 -> ESP32 ADC 引脚ESP32 DAC 引脚 -> 音频放大器模块 -&…...

SpringBoot项目,配置文件pom.xml的结构解析

pom.xml 是 Maven 项目对象模型&#xff08;Project Object Model&#xff09;的配置文件&#xff0c;它定义了 Maven 项目的基本设置和构建过程。以下是 pom.xml 文件的基本结构和一些常见元素的解析&#xff1a; 项目声明 (<project>): <modelVersion>: 通常设置…...

教程:Spring Boot中集成Memcached的详细步骤

教程&#xff1a;Spring Boot中集成Memcached的详细步骤 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代应用开发中&#xff0c;缓存是提升性能和扩展性…...

Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现

Rqtz : 个人主页 ​​ 共享IT之美&#xff0c;共创机器未来 ​ Sharing the Beauty of IT and Creating the Future of Machines Together 目录 项目背景 ​编辑​专有名词介绍 服务器GUI展示 功能(位置见上图序号) 客户端GUI展示&#xff08;h5cssjs&#xf…...

实验一 MATLAB \ Python数字图像处理初步

一、实验目的&#xff1a; 1&#xff0e;熟悉及掌握在MATLAB\Python中能够处理哪些格式图像。 2&#xff0e;熟练掌握在MATLAB\Python中如何读取图像。 3&#xff0e;掌握如何利用MATLAB\Python来获取图像的大小、颜色、高度、宽度等等相关信息。 4&#xff0e;掌握如何在M…...

echarts柱状选中shadow阴影背景宽度设置

使用line&#xff0c;宽度增大到所需要的宽度&#xff0c;设置下颜色透明度就行 tooltip: {trigger: axis,//把阴影的层级往下降z:-15,axisPointer: {type: line,lineStyle: {color: rgba(150,150,150,0.3),width: 44,type: solid,},}, }, series: [{type: bar,barWidth:20,//…...

ArrayBuffer 对象常见的几个用途

ArrayBuffer 在 JavaScript 中的用途广泛&#xff0c;主要用于处理二进制数据。 ArrayBuffer 对象、 TypedArray 视图和 DataView 视图是 JavaScript 操作二进制数据的一个接口。本文介绍ArrayBuffer 对象的常见的一些用法。 1. 网络传输二进制数据 使用方法&#xff1a;通过 …...

STC89C52RC单片机设计的FM收音机+自动搜台+存储电台(程序+原理图+PCB)

资料下载地址&#xff1a;STC89C52RC单片机设计的FM收音机自动搜台存储电台&#xff08;程序原理图PCB) 1、实物图 2、部分程序 #include <reg52.h> #include "tea5767.h" #include "delay.h" #include "lcd1602.h" //K1:上一台 K2:下一…...

【若依】关闭当前标签页并跳转路由到其他页面

使用场景如&#xff1a;当在新增/编辑路由页面提交成功后&#xff0c;需要关闭当前页&#xff0c;并跳转回列表页。 实现代码&#xff1a; this.$store.dispatch("tagsView/delView", this.$route); //关闭当前页 this.$router.replace({ path: "/xxx/xxx"…...

防爆智能手机如何解决危险环境下通信难题?

在化工厂、石油行业、矿山等危险环境中&#xff0c;通信安全一直是难题。传统手机因不具备防爆功能&#xff0c;可能引发火花、爆炸等安全风险&#xff0c;让工作人员在关键时刻难以及时沟通。但如今&#xff0c;防爆智能手机的出现彻底改变了这一现状&#xff01; 安全通信&am…...

软件测试最全面试题及答案整理(2024最新版)

1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&#xff0c;不断…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...