CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

博主在刷题过程中遇上这样一个有意思的加密(如下图),苦苦思索其逆向运算,被硬控了很久,也没搜到什么资料来解释这个问题(也许是太简单??蒟蒻博主怀疑人生……)

经过博主不断猜想、写代码验证再配合已有的位运算知识,也算是总结出一些规律

直接先上结论:这个加密是(伪)对称加密,其解密就是加密本身!

此处的(伪)对称加密指的是,使用该函数加密、再解密的结果只有映射到ASCII表中才是对称的,即仅对字符数组满足对称加密


一,加密特征

本文标题其实已经揭露了该加密的特征,就是(x<<4) | (x >>4)

注意这里的4,很有可能被题目以其它等价运算的形式表现出来,例如<<4改成*16>>4改成/16等等

博主目前只遇到过左右移4的情况,但经过测试发现,位移操作数若是(4,8,12,16,24)这里面的数,也满足对称加密,但要注意的是,左右移的操作数应为同一个数,即不能是(x<<4) | (x>>8)这样的情况(左右移争对的是两个不同的数)

(注:32也满足,但按照位移运算的定义,左右移32位对于32位整数来说相当于未操作,因此不列入)

结论:f(x)=(x<<shift) | (x>>shift)且shift属于集合(4,8,12,16,24),则f(x)的结果映射到ASCII表(0,127)中是对称加密。


二,(伪)对称验证

#include <bits/stdc++.h>
using namespace std;
int func(int x) {int shift = 4;return (x << 8) | (x >> 8);//4,8,12,16,24
}
int main() {int x = 99;cout << "明文: " << x << " " << (char)x << endl;x = func(x); //加密cout << "密文: " << x << endl;x = func(x); //解密cout << "二次加密(伪明文): " << x << endl;cout << "伪明文%128: " << x % 128 << " " << (char)(x % 128) << endl; //将解密得到的伪明文%128(映射到ASCII码表)return 0;
}

 因此,在逆向分析过程中遇到满足此特征的加密,即可认为是(伪)对称加密,可直接使用原函数进行解密,但要牢记的是解密得到的结果应该%128(映射到ASCII码表)才是正确明文


三,证明过程

博主不是什么专业的密码学或数学学者,只能从位运算的本质出发,通过对比加解密后的结果明文的差异来得出结论

(或运算的规则:同位有1则1,同位都0则0)

函数f(x)=(x<<4) | (x>>4)

明文:        0000 0000 0000 0000 0000 0000 0001 0000

①明文<<4: 0000 0000 0000 0000 0000 0001 0000 0000

②明文>>4: 0000 0000 0000 0000 0000 0000 0000 0001

①|②:       0000 0000 0000 0000 0000 0001 0000 0001    <-此时完成加密得到密文

c密文<<4:0000 0000 0000 0000 0001 0000 0001 0000

d密文>>4:0000 0000 0000 0000 0000 0000 0001 0000

c|d:           0000 0000 0000 0000 0001 0000 0001 0000    <-此时完成解密得到伪明文

此时我们重点关注被f(x)加密再解密的结果与明文的差异:

明文:        0000 0000 0000 0000 0000 0000 0001 0000

c|d:           0000 0000 0000 0000 0001 0000 0001 0000(伪明文)

明文的十进制值为16,伪明文的十进制值为4112,满足4112%128=16

从它们的二进制值也能直观看出,伪明文与明文仅差在第13位(红色部分),而128等于2的8次方,因此模128的结果只会剩下最后8位(绿色部分),也就和明文一致了

根据该思路,不难证明当shift属于集合(4,8,12,16,24)中的数时,均满足此规律,此处便不再赘述

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

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

相关文章

[C++]哈希应用-布隆过滤器快速入门

布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是一个由布隆在1970年提出的概率型数据结构&#xff0c;它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器的主要特点是高效的插入和查询&#xff0c;可以用于检索一个元素是否在一个集合中。 原理…

Springboot整合飞书向群组/指定个人发送消息/飞书登录

Springboot整合飞书向群组发送消息 飞书开放平台创建企业自建应用 添加应用能力-机器人 创建完成后&#xff0c;进入应用详情页&#xff0c;可以在首页看到 App Id 和 App Secret 在飞书pc端创建一群机器人 此处可以拿到该机器人的webhook地址,通过https的方式,也可以调用发送…

JavaEE企业级开发中常用的JDK7和JDK8的时间类

JDK7时间类 全世界的时间有一个统一的计算标准 在同一条经线上的时间是一样的 格林威治时间 简称GMT 计算核心 地球自转一天是24小时 太阳直射正好是12小时 但是误差太大 现在用原子钟来代替 用铯原子震动的频率来计算时间&#xff0c;作为世界的标准时间UTC 中国标准时间…

Spring-依赖注入的处理过程

前置知识 1 入口 DefaultListableBeanFactory#resolveDependency 2 每个依赖都有对应的DependencyDescriptor 3 自定绑定候选对象处理器AutowireCapableBeanFactory 注入处理 我们可以看到AutowireCapableBeanFactory中有两个方法&#xff1a; 第一个是单个注入&#xff1a;…

Python标准库中的生成器函数大全(非常详细)

用于筛选的生成器函数 从输入的可迭代对象中产生项的子集,而且不修改项本身。多数可筛选生成器接收一个predicate参数。这个参数的值是个布尔函数,接收一个参数,应用到输入中的每一项上,用于判断项是否包含在输出中。 itertools.compress(it,selectors_it) 并行处理两个…

2024蓝桥杯CTF writeUP--cc

给了个网页&#xff0c;里面有加密算法&#xff0c;密钥&#xff0c;密文 使用在线解码工具 CTF最全在线工具整理_在线ctf工具-CSDN博客 将输出的密文&#xff0c;密钥&#xff0c;vi&#xff0c;加密方式一一对应

谈谈IP地址

IP地址 IP地址概念动态分配 IP(DHCP)NAT机制(网络转换机制)IPv6 IP地址组成特殊的IP地址 IP地址 IP协议报文结构: 概念 IP地址: 描述了主机的具体位置.有32位,利用点分十进制的方式来表示.例如: 192.168.190.77 32位ip地址表示的数据非常有限,42亿九千万…, 那么ip地址不够用…

学QT的第三天~

ikun登录界面完善 #include "mywidget.h" void MyWidget::bth1() { if(edit3 ->text()"520cxk"&&edit4 ->text()"1314520") { //1.实例化一个QmessageBox类的对象 QMessageBox box(QMessageBox::Information, //图标 "恭喜…

数据结构与算法(5)队列的基本操作

#include<stdio.h> #include<stdlib.h> #include<stdbool.h> typedef int ElemType; #define MaxSize 10//队列的定义 typedef struct SqQueue {ElemType data[MaxSize];int front, rear;//front为头指针&#xff0c;rear为尾指针。这里并不是真正的“指针”…

嵌入式数据库SQLite 3配置使用详细笔记教程

0、惨痛教训 随着管理开发的项目体积越来越庞大&#xff0c;产品系统涉及的数据量也越来越多&#xff0c;并且伴随着项目不久就要交付给甲方了。如果项目的数据信息没有被妥善管理&#xff0c;后期设备的运行状态、操作状况等数据流信息不能被溯源&#xff0c;当出现了一些特殊…

conll-2012-formatted-ontonotes-5.0中文数据格式说明

CoNLL-2012 数据格式是用于自然语言处理任务的一种常见格式&#xff0c;特别是在命名实体识别、词性标注、句法分析和语义角色标注等领域。这种格式在 CoNLL-2012 共享任务中被广泛使用&#xff0c;该任务主要集中在语义角色标注上。 CoNLL-2012 数据格式通常包括多列&#xf…

python:画饼图

我现在因工作需要在写一篇中文文章&#xff0c;领导要我用python处理数据和画图&#xff0c;那我也刚好学习一下python画图。 import matplotlib.pyplot as plt # 饼图数据 labels [A, B, C, D] sizes [15, 30, 45, 10] # 每个部分的大小 # 绘制饼图 plt.figure(figsize(6,…

Python项目开发实战:俄罗斯方块游戏(案例教程)

一、项目概述 俄罗斯方块(Tetris)是一款经典的益智游戏,它以其简单易懂的游戏规则和丰富的变化吸引了无数玩家。本项目旨在使用Python编程语言及其图形库Pygame来开发一个基础的俄罗斯方块游戏。通过本项目,我们将了解游戏开发的基本流程,掌握Python和Pygame的基本用法,并…

MySQL sql_mode引发的异常

背景介绍 项目代码在多个环境运行&#xff0c;其中一个环境有问题。一直报错sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (3065, "Expression #2 of ORDER BY clause is not in SELECT list, references column xxx which is not in SELECT list; this i…

紧跟生成式AI暴雨发布新时代推理服务器

近日&#xff0c;暴雨发布最新训推一体AI服务器&#xff0c;以大容量内存和灵活的高速互连选项满足各种AI应用场景&#xff0c;最大可能支持扩展插槽&#xff0c;从而大幅提升智能算力性能&#xff0c;以最优的性能和成本为企业的模型训练推理落地应用提供更好的通用算力。 AIG…

软考系列必过资料分享-系统架构师-系统分析师-信息系统项目管理师

建议,写在前面 知识点是公用的,原则上不分新旧。每年会有少部分的题目切合当前时间段&#xff08;也是通过旧的知识演变的&#xff09; 信息系统项目管理师证书 系统架构师证书 系统分析师证书 资料分享 关注公众号 回复 信息系统项目管理师资料 即可获取信息系统项目管理师资…

【RAG 论文】Dense X 检索:将“命题”作为检索粒度

论文&#xff1a;Dense X Retrieval: What Retrieval Granularity Should We Use? ⭐⭐⭐⭐ Code: github.com/ct123098/factoid-wiki 文章目录 一、论文速读二、命题&#xff08;Proposition&#xff09;三、FactoidWiki四、实验及分析4.1 Passage Retrieval 任务4.2 Open-Do…

数据结构-线性表-链表-2.3-7

设在一个带头结点的单链表中所有元素的数据值无序&#xff0c;试编写一个函数&#xff0c;删除表中所有介于给定的两个值&#xff08;作为函数参数给出&#xff09;之间的元素的元素&#xff08;若存在&#xff09;。 无序链表&#xff0c;逐个结点进行检查&#xff0c;执行删…

VSCode-vue3.0-安装与配置-export default简单例子

文章目录 1.下载VSCode2.修改语言为中文3.辅助插件列表4.vue3模板文件简单例子5.总结 1.下载VSCode 从官网下载VSCode&#xff0c;并按下一步安装成功。 2.修改语言为中文 点击确认修改&#xff0c;如下图所示&#xff1a; 或者打开命令面板&#xff1a;输入Configure Displ…

党建教育vr虚拟现实展厅真正实现了绿色、低碳的展示方式

在数字化浪潮席卷的今天&#xff0c;传统企业门户官网已难以满足企业日益增长的展示需求。面对这一挑战&#xff0c;北京华锐凭借深厚的行业经验和领先的技术实力&#xff0c;为您提供全新的元宇宙虚拟展厅制作服务&#xff0c;助您轻松打破现实与虚拟的界限&#xff0c;开启企…