一个简单的异或加密算法

C++实现简单异或加密算法 #pragma once #include class NXCORE_API XorCrypt { public: static std::string Xor(__in const std::string& input, __in const std::string& key); static bool Encrypt(__in const std::string& input, 阅读详情

异或运算:(B ^ A) ^ A = B ^ 0 = B
根据这个规律可设计出简单加密算法。
B为原始数据,A为密钥。
B与A进行异或得到密文。
将密文与A进行异或可以得到明文B。

对于不同的数据,有的数据可能需要加密,有的无须加密。不同数据之前可能采用的密钥不同。

定义结构体:
typedef struct _CIPHER {
u32 cipher_code; ///>解密key
u8 cipher_enable; ///>解密读使能
} CIPHER;
使用32位表示密钥,8位表示是否使能加解密。

这里可以根据不同数据来初始化密钥以及是否使能加密操作:
void cipher_init(CIPHER *pcipher, u32 key)
{
pcipher->cipher_code = key;//key初始化
cipher_ctl(pcipher, 0);//不使能解密
}
初始化后,默认是不进行加解密的。

通过控制函数来进行加解密的配置:
1表示使能加密
0表示禁止加密
static void cipher_ctl(CIPHER *pcipher, u8 ctl)
{
pcipher->cipher_enable = ctl;
}

该函数提供关闭加密功能:
void cipher_close(CIPHER *pcipher)
{
cipher_ctl(pcipher, 0);//不使能解密
}

这里采用按照4字节对齐的方式进行加解密。
addr % 4 = 0,使用cipher_code[0]进行加解密;
addr % 4 = 1,使用cipher_code[1]进行加解密;
addr % 4 = 2,使用cipher_code[2]进行加解密;
addr % 4 = 3,使用cipher_code[3]进行加解密。

宏定义,4字节对齐
#define ALIN_SIZE 4

解密函数:
void cryptanalysis_buff(CIPHER *pcipher, void *buf, u32 faddr, u32 len)
pcipher:加解密结构体指针,包含密钥、加密使能标志。
buf:需要解密的数据。
faddr:数据存储的首地址。
len:需要解密的数据长度,单位字节。

由于是按照4字节对齐的方式进行加解密,因此数据头部、尾部可能存在没有对齐的数据。使用下面两个变量来表示头尾没有对齐的数据字节个数:
u8 head_rem;//头部未对齐的字节数,多出来的字节
u8 tail_rem;//尾部对齐未满4字节的字节数,多出来的字节

定义一个指针来指向密钥,便于后面使用密钥。
u8 *cipher_code;
cipher_code = (u8 *)&pcipher->cipher_code;//密钥

首先需要判断,如果没有使能加解密,则直接返回即可,无须进行解密操作。
if (!pcipher->cipher_enable) {//没有使能解密,则直接返回
return;
}

文件加密采用4字节对齐方式
地址0000使用key0加密
地址0001使用key1加密
地址0002使用key2加密
地址0003使用key3加密
如果传入的buf不是4字节对齐的,则需要先把头部未对齐的字节解密
再使用for循环将中间对齐的字节解密
最后将尾部对齐的未满4字节的数据字节解密

这里根据地址,首先计算出头部没有对齐的字节数:
4 - (0 - 3) = 1-4
head_rem = ALIN_SIZE - (faddr % ALIN_SIZE);//范围1-4
if (head_rem == ALIN_SIZE) {//如果为4表示是对齐的
head_rem = 0;
}
通过上述处理,head_rem为0-3,表示未对齐字节个数
即addr到所在4字节对齐区域尾地址字节个数

当总长度len范围为1-2时,len可能小于head_rem,即需要处理的数据字节数小于4个,且未对齐
head_rem就为len个数据,如len为1,head_rem为2,表示此时仅需要处理1个数据即可
if (head_rem > len) {
    head_rem = len;
}

需要处理的数据长度比头部未对齐的数据个数多,则使用地址加数据长度对4求余得到尾部的未对齐字节数。
如果需要处理的数长度比头部未对齐的数据个数少,此时len个数据都在一个4字节地址对齐的空间中,没有尾部没对齐字节数。
if (len - head_rem) {//len大于head_rem
tail_rem = (faddr + len) % ALIN_SIZE;//尾部对齐未满4字节的个数
} else {
tail_rem = 0;//len小于等于head_rem则说明无须处理尾部未对齐,此时数据在一个4字节对齐的地址空间中
}

如果head_rem为0,则不进行for循环
如果head_rem为1,则只处理1字节,即buf[0],key为key[3]
如果head_rem为2,则只处理2字节,即buf[1-0],key为key[3-2]
如果head_rem为3,则只处理3字节,即buf[2-0],key为key[3-1]
for (i = head_rem; i > 0; i--) {
    buf_1b_ali[i - 1] ^= cipher_code[j--];
}

上述将头部进行了解密操作。

对于中间对齐的部分,使用for循环即可进行解密。
buf_1b_ali = buf;
buf_1b_ali = (u8 *)(buf_1b_ali + head_rem);//指向第一个4字节对齐的首地址
len_ali = len - head_rem - tail_rem;//所有对齐区域字节数
for (i = 0; i < (len_ali / 4); i++) {
buf_1b_ali[0 + i * 4] ^= cipher_code[0];//4字节对齐第一个字节,对应key[0]
buf_1b_ali[1 + i * 4] ^= cipher_code[1];//4字节对齐第二个字节,对应key[1]
buf_1b_ali[2 + i * 4] ^= cipher_code[2];//4字节对齐第三个字节,对应key[2]
buf_1b_ali[3 + i * 4] ^= cipher_code[3];//4字节对齐第四个字节,对应key[3]
}

尾部数据解密类似头部,不过key从0开始。
buf_1b_ali = buf;
buf_1b_ali += len - tail_rem;//处理尾巴处数据
j = 0;
for (i = 0 ; i < tail_rem; i++) {
buf_1b_ali[i] ^= cipher_code[j++];//尾巴数据从key[0]开始
}
这里仅提供解密操作流程。首先对头部未对齐数据进行解密,再对中间对齐的数据进行解密,最后对尾部未对齐数据进行解密。

JAVA 可逆加密算法的简单实现 - XOR异或运算 很多加密包都提供复杂的加密算法,比如MD5,这些算法有的是不可逆的。 有时候我们需要可逆算法,将敏感数据加密后放在数据库或配置文件中,在需要时再再还原。 这里介绍一种非常简单的java实现可逆加密算法。 算法使用一个预定义的种子(seed)来对加密内容进行异或运行,解密只用再进行一次异或运算就还原了。 代码如下: seed任意写都可以。   package cn.exam.signu 阅读详情

相关推荐

uniapp 开发微信小程序请求问题 , 真机调试正常,开发工具正常,但是使用扫码预览接口都是不通的,发布到体验版也是请求失败

uniapp开发小程序体验版接口请求失败(真机可以)

weixin_60408555的博客 3954

加密算法[异或]

提要涉及知识点前言异或基本思想代码实现基本流程暴露问题问题解决 涉及知识点 异或加密算法思想 字符串结束符 异或运算符 前言 第一周内容是加密算法的代码复现。 内容丰富也很有趣,但由于刚放假的心态问题等学得并不多。 加密算法其实存在于电脑编程的方方面面,无论是为了参加CTF比赛还是单纯为了学习网络安全,加密算法的学习都必不可少。 异或 基本思想 异或,顾名思义,是一种基于异或运算的加密算法。 在离散数学的学习中我们接触了各类位运算:(假定下表中a和b均为整型) 在这里我们不做赘述,只单纯讲讲异或运算。

Pluto_cannon的博客 4660

手把手教你用ComfyUI搭建高效AI绘画工作流:从基础到高级技巧

本文详细介绍了如何使用ComfyUI构建高效的AI绘画工作流,从基础配置到高级技巧全面覆盖。通过模块化设计,ComfyUI显著提升显存利用率和创作灵活性,适合从新手到专业用户。文章包含部署指南、工作流搭建、性能优化及行业应用案例,帮助读者快速掌握AI绘画核心技术。

7up55的博客 718

异或加密(XOR)原理及实现 (**)

异或加密(XOR)原理及实现

ken2232的博客 9063

KIBANA可视化管理界面说明

更说明转自https://blog.youkuaiyun.com/IT_ZRS/article/details/125496588 1 主要结构功能 使用浏览器访问 ip:5601 默认端口,进入首页 Discover:日志管理视图 主要进行搜索和查询 Visualize:统计视图 构建可视化的图表 Dashboard:仪表视图 将构建的图表组合形成图表盘 Timelion:时间轴视图 随着时间流逝的数据 APM:性能管理视图 应用程序的性能管理系统 Canvas:大屏展示

tian830937的专栏 7083

【SpringBoot 4.x 第29节】Spring Security 7 入门:先理解认证和授权!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 552

异或加密(XOR)原理及实现

异或加密是一种加密算法,利用了计算机中的异或计算,异或计算(符号记为 ‘^’)的原理是,相同为 0,不同为 10 ^ 0 = 01 ^ 1 = 01 ^ 0 = 10 ^ 1 = 1由于 1 ^ 0 或 0 ^ 1 的结果都为 1,因此,不能直接由结果 1 推出原来的明文到底是 0 还是 1,达到保护明文的目的。

weixin_45419660的博客 3962

SAP FICO资产明细表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO资产明细表开发说明书(包括源代码,测试样例及FS)

我好像病了的博客 1469

异或算法——简单实用的数据加密方法

异或算法或许是最简单实用的数据加密方法

阿里云开发者 541

virtuoso如何导出def?

在DEF Out界面,填写def name,library name以及cell name ,cell view既layout,把Output "Floating Shapes" into SPECIAL NETS Section勾上,OK即可。2)在要导出的layout界面选中PAD和prBoundary(shift+左键),快捷键C copy到空cell里,这时需要调整copy过来的object坐标,让两边prBoundary的坐标相同。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 2306

第78篇:AI辅助创意与设计工作流——Logo、海报、UI的自动化生成与迭代(操作教程)

在广告公司和设计团队摸爬滚打几年,我见过太多设计师为一个Logo的配色、一张海报的版式反复修改到深夜。自从AI绘画工具爆发,我就一直在琢磨,怎么把这些“黑科技”真正塞进设计师的日常流水线里,而不是让它们仅仅是个玩具。今天要聊的,就是一套我实践下来,能真正提升效率的AI辅助创意与设计工作流。我们不谈颠覆,只谈增效——如何用AI快速完成Logo、海报、UI的灵感生成、批量出图与智能迭代,把设计师从重复劳动中解放出来,聚焦在真正的创意决策上。

weixin_37464284的博客 539

异或加密算法

异或加密是通过使用布尔代数中的异或函数(XOR)实现的,XOR是一个二元运算符(即有两个参数,类似加号),按其名称“异或”容易推断两个参数中有且仅有一个为真(即两参数相异)时,结果返回真,真值表如下: A B A XOR B T T F T F T F T T F F

洒满阳光的午后的博客 1万+

手把手教你学PCIE(2.1.23)--PCIe基本概念:链路速率协商

链路速率协商是一个多步骤的过程,确保发送端和接收端之间的链路速率设置一致。通过初始化链路速率寄存器、发送和接收 TS2 序列、检测链路对端的存在、交换链路速率信息、确定最大链路速率和配置链路速率,可以确保 PCIe 设备之间的数据传输速度最大化,从而提高数据传输效率。初始化链路速率寄存器:设置支持的最大链路速率。发送和接收 TS2 序列:检测链路对端的存在。交换链路速率信息:发送和支持的最大链路速率。确定最大链路速率:选择最小值作为最终链路速率。配置链路速率:更新链路速率寄存器。

MHD0815的博客 1815

简单异或加密算法

/** * 简单异或加密算法 * * @param info * @param key * @return */ public static String xorEncryption(String info, String key) { byte[] result = new byte[info.length()]; if (StringUtil.isBlank

那个谁的空间 961

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

一种简单的table异或加密算法

 一种简单的table异或加密算法

把梦想放飞在蓝色的天空里... 2026

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

matlab ascii 异或,A代码转换--“简单异或”加密算法

注:本题只需要提交标记为填充部分之间的代码,请按照C++方式提交。简单异或密码(simple XOR cipher)是密码学中一种简单的加密算法。其加密原理为,将要加密的字符变量ptext和密码字符变量code进行异或(^)运算得到密文字符变量 ctext ,即 ctext = ptext^code。对应的解密原理为,将获得的密文字符变量 ctext与密码字符变量code进行异或(^)运算得到原密...

weixin_32515577的博客 658

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

简单的文件加密算法——异或运算(附C++代码)

这样,我们就能得到一个新的文件。异或运算的好处是如果加密后的文件在和我们加密用的二进制串做异或,就能得到原来的文件。也就是,同样的操作就既能实现加密,也能实现解密。文件加密的方法就是对这每一个0和1进行修改,让它无法辨认出来。此外,我们的方法需要能够让原来的文件被。,便来谈一谈这个算法的原理,顺便实现一下。如果你觉的有帮助的话,不妨点一个赞,爱学习的你真棒!​ 现有一个.txt文件里面的内容是hello world!​首先,在操作系统下,我们要以。​文件的信息为1001;我的加密机为1111;

qq_73075805的博客 2289

php异或加密算法,简单的异或加密解密算法

写在最前这篇文章主要介绍了针对于项目开发中对于一些get参数和表单提交的处理方法,目的是不让参数以及进行表单提交时数据过分的暴露,整个加密过程通过异或的方法处理所提交的参数和数据,第一次加密是和随机的混淆字符 第二次则是和用户定义的key值,解密过程相同,只是为了完成相应的业务逻辑。这种方法简单也可以封装成类库在框架中使用,可自己在本地测试,接下来我们来实际的操作吧:代码示例...

weixin_35823403的博客 964

java 简单加密算法_Java小知识点------最简单的加密算法(异或加密)

下面给出最简单的代码,可在该代码的基础上添加其他功能,比如将加密后的字符串输出到文件中,从文件中读取要加密或者解密的字符串等。。。public class Encryption {// 异或加密算法public static void main(String[] args){String password="中秋快乐。。。";//要加密或者解密的字符串char[]array=password.to...

weixin_39717692的博客 283

利用逐字节异或加密算法c语言,用异或算法实现文件的简单加密

该楼层疑似违规已被系统折叠隐藏此楼查看此楼给文件加密的技术很多,其中又分为不同等级,以适合不同场合的需要.这里给出最简单的文件加密技术,即采用文件逐字节与密码异或方式对文件进行加密,当解密时,只需再运行一遍加密程序即可.下面是一个实例程序,能对任意一个文件进行加密,密码要求用户输入,限8位以内(当然你可以再更改).程序有很好的容错设计,这是我们应该学习的./*Turbo2.0pass.g...

weixin_39678531的博客 929

利用异或进行的简单文件加密算法

using System;using System.Collections.Generic;using System.Text;using System.IO;// namespace DESFileSmart{ public class DESFileSmartClass { /// <summary> /// 加/解密文件算法...

weixin_34368949的博客 149

C#简单的异或加密可逆加密算法

C#代码 namespaceDevgg.Common { usingSystem; publicclassEncryptString { privateconstCharXOR_STRING=‘天啦’; ...

aitanwu4387的博客 636

异或加密算法--简单快速的文本加密算法

思路:原理是用字节b对字节A异或两次结果还是A;算法对于exe、图片、视频加密很好用,可以只解密其中的某一部分字节,这样资料就损坏了;只要保证key不泄露,暴力破解其实也不好破解(有懂的欢迎评论区讨论);对同一文本加密两次会无效,实际项目需要添加已加密的标识。对于普通业务的文本资料混淆特别好用;

Nickee-Lin的博客 391

异或运算实现简单的字符串加密和解密

异或运算:  1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0 字符'A' 的ASCII编码为65 : 00000000 01000001 取整数7 : 00000000 00000000 00000000 00000111 XOR运算后 : 00000000 00000000 00000000 01000110  

u010413574的博客 3214
上一篇: 设备管理器说明2
下一篇: SPI接口协议的学习1
freedomAfish
博客等级 码龄15年 19粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值