密码学原理精解【5】
这里写目录标题
- 移位密码
- 概述
- 代码
- 希尔密码( Z 256 Z_{256} Z256)
- 待加密长度被3整除
- 待加密长度不一定被3整除
- 加解密文件
移位密码
概述
以 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)=(x−k)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 为密钥 加密: e k ( x ) ( x k ) m o d 26 解密: d k ( x ) ( x − k ) m o d 26 以z_{…...
Unity3D 资源管理YooAsset原理分析与详解
引言 Unity3D 是一款广泛应用于游戏开发、虚拟现实(VR)、增强现实(AR)等领域的强大游戏开发引擎。在开发过程中,资源管理是一项至关重要的任务,它直接影响到游戏的性能和用户体验。YooAsset 是一个基于 Un…...
npm install puppeteer 报错 npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated解决办法
npm install puppeteer 报错如下: 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 程序设计》题目集 参考答案 本答案配套详解教程专栏,欢迎订阅: PTA浙大版《Python 程序设计》题目集 详解教程_少侠PSY的博客-CSDN博客 01第1章-1 从键盘输入两个数,求它们的和并输出 aint(input()) # 输入a的值 bint(…...
“拆分盘投资:机遇与风险并存
一、引言 随着互联网技术的日新月异,金融投资领域迎来了前所未有的变革,其中拆分盘作为一种新兴的投资模式,正逐渐进入公众的视野。其独特的价值增长逻辑和创新的投资机制,为投资者开辟了新的财富增值渠道。本文旨在深入探讨拆分…...
Java面试题系列 - 第2天
题目:Java中的线程池模型及其配置策略 背景说明:在Java多线程编程中,线程池是一种高效的线程复用机制,能够有效管理和控制线程的创建与销毁,避免频繁创建和销毁线程带来的性能开销。理解和掌握线程池的配置策略对于优…...
AGI|Transformer自注意力机制超全扫盲攻略,建议收藏!
一、前言 2017年,谷歌团队推出一篇神经网络的论文,首次提出将“自注意力”机制引入深度学习中,这一机制可以根据输入数据各部分重要性的不同而分配不同的权重。当ChatGPT震惊世人时,Transformer也随之进入大众视野。一夜之间&…...
QT+OpenCV在Android上实现人脸实时检测与目标检测
一、功能介绍 在当今的移动应用领域,随着技术的飞速发展和智能设备的普及,将先进的计算机视觉技术集成到移动平台,特别是Android系统中,已成为提升用户体验、拓展应用功能的关键。其中,目标检测与人脸识别作为计算机视…...
常见网络攻击方式及防御方法
1. DDOS攻击(分布式拒绝服务攻击) 概念:借助于C/S(客户端/服务器)技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDOS攻击,从而成倍地提高拒绝服务攻击的威力。防护方…...
使用 ESP32 实现无线对讲机功能涉及音频采集、音频传输以及音频播放等多个方面。实现无线对讲机功能的基本步骤和示例代码。
硬件准备 两个 ESP32 开发板两个 MAX9814 麦克风模块(或其他兼容的模拟麦克风模块)两个 MAX98357A DAC 模块(或其他兼容的音频放大器模块)扬声器 接线 麦克风模块 -> ESP32 ADC 引脚ESP32 DAC 引脚 -> 音频放大器模块 -&…...
SpringBoot项目,配置文件pom.xml的结构解析
pom.xml 是 Maven 项目对象模型(Project Object Model)的配置文件,它定义了 Maven 项目的基本设置和构建过程。以下是 pom.xml 文件的基本结构和一些常见元素的解析: 项目声明 (<project>): <modelVersion>: 通常设置…...
教程:Spring Boot中集成Memcached的详细步骤
教程:Spring Boot中集成Memcached的详细步骤 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代应用开发中,缓存是提升性能和扩展性…...
Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现
Rqtz : 个人主页 共享IT之美,共创机器未来 Sharing the Beauty of IT and Creating the Future of Machines Together 目录 项目背景 编辑专有名词介绍 服务器GUI展示 功能(位置见上图序号) 客户端GUI展示(h5cssjs…...
实验一 MATLAB \ Python数字图像处理初步
一、实验目的: 1.熟悉及掌握在MATLAB\Python中能够处理哪些格式图像。 2.熟练掌握在MATLAB\Python中如何读取图像。 3.掌握如何利用MATLAB\Python来获取图像的大小、颜色、高度、宽度等等相关信息。 4.掌握如何在M…...
echarts柱状选中shadow阴影背景宽度设置
使用line,宽度增大到所需要的宽度,设置下颜色透明度就行 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 中的用途广泛,主要用于处理二进制数据。 ArrayBuffer 对象、 TypedArray 视图和 DataView 视图是 JavaScript 操作二进制数据的一个接口。本文介绍ArrayBuffer 对象的常见的一些用法。 1. 网络传输二进制数据 使用方法:通过 …...
STC89C52RC单片机设计的FM收音机+自动搜台+存储电台(程序+原理图+PCB)
资料下载地址:STC89C52RC单片机设计的FM收音机自动搜台存储电台(程序原理图PCB) 1、实物图 2、部分程序 #include <reg52.h> #include "tea5767.h" #include "delay.h" #include "lcd1602.h" //K1:上一台 K2:下一…...
【若依】关闭当前标签页并跳转路由到其他页面
使用场景如:当在新增/编辑路由页面提交成功后,需要关闭当前页,并跳转回列表页。 实现代码: this.$store.dispatch("tagsView/delView", this.$route); //关闭当前页 this.$router.replace({ path: "/xxx/xxx"…...
防爆智能手机如何解决危险环境下通信难题?
在化工厂、石油行业、矿山等危险环境中,通信安全一直是难题。传统手机因不具备防爆功能,可能引发火花、爆炸等安全风险,让工作人员在关键时刻难以及时沟通。但如今,防爆智能手机的出现彻底改变了这一现状! 安全通信&am…...
软件测试最全面试题及答案整理(2024最新版)
1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
