当前位置: 首页 > 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;不断…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…...