Base-N 算法加密解密实现:

2023-05-16

目录

Base-N 算法加密解密实现:

Base64 加密解密:(C 语言、python)

Base32 加密解密:(C 语言)


Base-N 算法加密解密实现:

Base64 加密解密:(C 语言、python)

Base64 介绍:

Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 2^6=64,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节有 24 个比特,对应于 4 个 Base64 单元,即 3 个字节可由 4 个可打印字符来表示。它可用来作为电子邮件的传输编码。在 Base64 中的可打印字符包括字母 A-Z、a-z、数字 0-9,这样共有 62 个字符,此外两个可打印符号在不同的系统中而不同。一些如 uuencode 的其他编码方法,和之后 BinHex 的版本使用不同的 64 字符集来代表 6 个二进制数字,但是不被称为 Base64。

Base64 常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括 MIME 的电子邮件及 XML 的一些复杂数据。 -----维基百科

编码规则:

第一步,将每三个字节作为一组,一共是 24 个二进制位

第二步,将这 24 个二进制位分为四组,每个组有 6 个二进制位

第三步,在每组前面加两个 00,扩展成 32 个二进制位,即四个字节

第四步,根据下表,得到扩展后的每个字节的对应符号,这就是 Base64 的编码值

ca90d02021670c834c4dfe35e3eaeb91.png

特别的:

如果要编码的字节数不能被 3 整除,最后会多出 1 个或 2 个字节,那么可以使用下面的方法进行处理:先使用 0 字节值在末尾补足,使其能够被 3 整除,然后再进行 Base64 的编码。

在编码后的 Base64 文本后加上一个或两个 = 号,代表补足的字节数。也就是说,当最后剩余两个八位字节( 2 个byte)时,最后一个 6 位的 Base64 字节块有四位是 0 值,最后附加上两个等号;如果最后剩余一个八位字节( 1 个byte)时,最后一个 6 位的 base 字节块有两位是 0 值,最后附加一个等号。

参考下表:

由于逆向中涉及 base64 加密解密很多次了,每次都不能一眼看出来,所以自己用 python 和 C 语言各仿照着写了一遍流程,希望能给以后加深印象。

Base64 加密解密的 C 语言实现:

逻辑流程图梳理:

根据流程图写代码:

#include<stdio.h>
#include<stdint.h>
#include<string.h>
#include<stdlib.h>
char *base64encry(char* input)	//base64 加密函数 
{	
	int len=0,str_len=0;
	char *encry;
	char *table64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	len=strlen(input);	//获取输入长度 
	if (len%3==0)
		str_len=(len/3)*4;
	else
		str_len=((len/3)+1)*4;
	encry=(char *)malloc(sizeof(char)*str_len+1);
	for(int i=0,j=0;i<len;i+=3,j+=4)
	{
		encry[j]=table64[input[i]>>2];
		encry[j+1]=table64[((input[i]&0x3)<<4)|((input[i+1])>>4)];
		encry[j+2]=table64[((input[i+1]&0xf)<<2)|(input[i+2]>>6)];
		encry[j+3]=table64[input[i+2]&0x3f];
	}
	switch(len%3)
	{
		case 1: encry[str_len-1]='=';
				encry[str_len-2]='=';
				break;
		case 2: encry[str_len-1]='=';
				break;
	}
	encry[str_len]='\0';
	return encry;
 } 
 
 char * base64decry(char *input)
 {
 	    int table[]={0,0,0,0,0,0,0,0,0,0,0,0,	//根据base64表,以字符找到对应的十进制数据 ,这里是int类型,移位的时候要转换成char地址。
    		 0,0,0,0,0,0,0,0,0,0,0,0,			//主要是没用下标索引类的函数,这里的ascii表示从0开始的 
    		 0,0,0,0,0,0,0,0,0,0,0,0,
    		 0,0,0,0,0,0,0,62,0,0,0,
    		 63,52,53,54,55,56,57,58,
    		 59,60,61,0,0,0,0,0,0,0,0,
    		 1,2,3,4,5,6,7,8,9,10,11,12,
    		 13,14,15,16,17,18,19,20,21,
    		 22,23,24,25,0,0,0,0,0,0,26,
    		 27,28,29,30,31,32,33,34,35,
    		 36,37,38,39,40,41,42,43,44,
    		 45,46,47,48,49,50,51
    	       };
    	int len=0,str_len=0;
    	char *decry;
    	len=strlen(input);
    	if (strstr(input,"=="))
    		str_len=(len/4)*3-2;
    	else if (strchr(input,'='))
			str_len=(len/4)*3-1;
		else 
			str_len=(len/4)*3;
		 decry=(char *)malloc(sizeof(char)*str_len+1);
		 for (int i=0,j=0;i<len;i+=4,j+=3)
		 {
		 	decry[j]=(table[input[i]]<<2)|(table[input[i+1]]>>4);
		 	decry[j+1]=(table[input[i+1]]<<4)|(table[input[i+2]]>>2);
		 	decry[j+2]=(table[input[i+2]]<<6)|(table[input[i+3]]);
		 }
		 decry[str_len]='\0';
		 return decry;

 }
 
 int main()
 {
 	char buff[100],*encry,*decry;
 	printf("请输入要加密的字符:"); 
 	scanf("%s",buff);
 	encry=base64encry(buff);
 	printf("\n加密后的字符:%s",encry);
 	decry=base64decry(encry);
 	printf("\n解密后的字符:%s",decry);
 	return 0;
 }

用法:

Base64 加密解密的 python 实现:

base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"			#准备好base64的基表
def encryption(inputstring):		#定义加密函数
	ascii=['{:0>8}'.format(str(bin(ord(i))).replace('0b','')) for i in inputstring]	#把每个输入字符保证8位一个,才能3*8变4*6。
#{:0>8}是右对齐8位然后左边补0,因为python是自己判断数据大小类型的,所以必须强制满足8位。bin转化二进制会带0b前缀,所以要用replace('0b','')去掉。
	encrystr='' #while外的变量,返回base64加密后的字符串
	equalnumber=0 #while外的变量,记录拆分后不足4的倍数时需要补齐的等号个数
	while ascii:
		subascii=ascii[:3] #用一个子列表subascii每次取输入的三位进行操作,前面操作后每位都是8位
		while len(subascii)<3:   #这里其实是最后一段截取中才会用上的,不满足3位时要单独取出,记录equalnumber数量用于后期补'='号,然后补齐8位的0免得干扰后面3*8拆分成4*6
			equalnumber+=1		#计算要补‘=’的个数
			subascii+=['0'*8]	#补8个0来填充够3的倍数,这然后面就不会出错。			
		substring=''.join(subascii)#用substring合并subascii的3个8位,准备进行拆分操作
		encrystringlist=[substring[x:x+6] for x in [0,6,12,18]]   #开始进行3*8变4*6的拆分,每次拆分一组24位。
		encrystringlist=[int(x,2) for x in encrystringlist]		#把前面拆分的6位一组转成10进制,就不用进行位数补齐操作了,这是用来后面对应base64基表的下标。
		if equalnumber:
			encrystringlist=encrystringlist[0:4-equalnumber]	#如果前面不足3字符补了0,比如2个8位字符16位,拆分后就要用3个6位共18位,所以有效位是4-equalnumber
		encrystr+=''.join(base64[x] for x in encrystringlist)	#这里encrystringlist已经在前面拆分成4*6且转换成10进制了,所以对应基表的下标。
		ascii=ascii[3:]		#每次向后取3个列表元素,对应while循环条件
	encrystr+='='*equalnumber		#因为前面encrystringlist[0:4-equalnumber]去掉了补0位,所以这里最后补齐'='号
	return encrystr

def decryption(inputstring):
	ascii=['{0:0>6}'.format(str(bin(base64.index(i))).replace('0b',''))for i in inputstring if i!='=']#从加密字符中取除补位'='之外加密字符,即6位生成的base64基表下标的数,按6位一组排列,准备拆分
	decrystr=''#准备while外的解密后的字符
	equalnumber=inputstring.count('=')#这里计数补位的'='号的个数,后面不够8位时会根据'='号补加位数。
	while ascii:	
		subascii=ascii[:4]#取加密字符的4个6位一组共24位准备拆分合并成3*8
		substring=''.join(subascii)#先连成一串24位
		if len(substring)%8!=0:
			substring=substring[0:-1*equalnumber*2] 
#截取到倒数第equalnumber*2个元素。对不足8位的组补位,因为加密时1个8位要来2个6位,两个'='号,截取到8位就是倒数第4位1*2*2。2个8位要3个6位,要一个'='号,截取到16位就是倒数第2位1*1*2。			
		decrystringlist=[substring[x:x+8] for x in [0,8,16]]#开始进行4*6变3*8的拆分,每次拆分4个6位一组24位。
		decrystringlist=[int(x,2) for x in decrystringlist if x]#把前面拆分的8位一组转成10进制,用来对应十进制ASCII码,if x功能不清楚,但不可缺少,应该是要排除空格吧。
		decrystr+=''.join([chr(x) for x in decrystringlist])#这里decrystringlist已经在前面拆分成3*8且转换成10进制了,现在转换成ASCII码。
		ascii=ascii[4:]#每次向后取4个列表元素,对应while循环条件
	return decrystr

if __name__=="__main__":
	print(encryption('a'))
	print(decryption('YQ=='))

Base32 加密解密:(C 语言)

base32 简介:

  Base32 编码使用 32 个 ASCII 字符对任何数据进行编码, Base32 与 Base64 的实现原理类似,同样是将原数据二进制形式取指定位数转换为 ASCII 码。首先获取数据的二进制形式,将其串联起来,每 5 个比特为一组进行切分,每一组内的 5 个比特可转换到指定的 32 个 ASCII 字符中的一个,将转换后的 ASCII 字符连接起来,就是编码后的数据。

base32 字典:

  Base32 依赖更小的字典,Base32 编码时每 5 个字符为一个分组,字典的长度为 25 + 1=33。

Base32 通用的字典定义如下:

Value

Encoding

Value

Encoding

Value

Encoding

Value

Encoding

0

A

9

J

18

S

27

3

1

B

10

K

19

T

28

4

2

C

11

L

20

U

29

5

3

D

12

M

21

V

30

6

4

E

13

N

22

W

31

7

5

F

14

O

23

X

padding

=

6

G

15

P

24

Y

7

H

16

Q

25

Z

8

I

17

R

26

2

Base32 还提供了另外一种字典定义,即 Base32 十六进制字母表:

Value

Encoding

Value

Encoding

Value

Encoding

Value

Encoding

0

0

9

9

18

I

27

R

1

1

10

A

19

J

28

S

2

2

11

B

20

K

29

T

3

3

12

C

21

L

30

U

4

4

13

D

22

M

31

V

5

5

14

E

23

N

padding

=

6

6

15

F

24

O

7

7

16

G

25

P

8

8

17

H

26

Q

Base32 加密解密的 C 语言实现:

逻辑流程图梳理:

 

#include<stdio.h>
#include<stdint.h>
#include<string.h>
#include<stdlib.h>
char *base32encry(char* input)	//base64 加密函数 
{	
	int len=0,str_len=0;
	char *encry;
	char *table32="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
	len=strlen(input);	//获取输入长度 
	if (len%5==0)
		str_len=len/5*8;
	else
		str_len=((len/5)+1)*8;
	encry=(char *)malloc(sizeof(char)*str_len+1);
	for(int i=0,j=0;i<len;i+=5,j+=8)
	{
		encry[j]=table32[input[i]>>3];
		encry[j+1]=table32[((input[i]&0x7)<<2)|((input[i+1])>>6)];
		encry[j+2]=table32[(input[i+1]>>1)&0x1f];
		encry[j+3]=table32[((input[i+1]&0x1)<<4)|((input[i+2])>>4)];
		encry[j+4]=table32[((input[i+2]&0xf)<<1)|((input[i+3])>>7)];
		encry[j+5]=table32[(input[i+3]>>2)&0x1f];
		encry[j+6]=table32[((input[i+3]&0x3)<<3)|((input[i+4])>>5)];
		encry[j+7]=table32[input[i+4]&0x1f];
	}
	switch(len%5)
	{
		case 1:encry[str_len-1]='\0';
				encry[str_len-2]='\0';
				encry[str_len-3]='\0';
				encry[str_len-4]='\0';
				encry[str_len-5]='\0';
				encry[str_len-6]='\0';
				break;
		case 2:encry[str_len-1]='\0';
				encry[str_len-2]='\0';
				encry[str_len-3]='\0';
				encry[str_len-4]='\0';
				break;
		case 3:encry[str_len-1]='\0';
				encry[str_len-2]='\0';
				encry[str_len-3]='\0';
				break;
		case 4:encry[str_len-1]='\0';
				break;
	}
	encry[str_len]='\0';
	return encry;
 } 
 
 char * base32decry(char *input)
 {
 	    int table[]={0,0,0,0,0,0,0,0,0,0,0,0,	//根据base64表,以字符找到对应的十进制数据 ,这里是int类型,移位的时候要转换成char地址。
    		 0,0,0,0,0,0,0,0,0,0,0,0,			//主要是没用下标索引类的函数,这里的ascii表示从0开始的 
    		 0,0,0,0,0,0,0,0,0,0,0,0,
    		 0,0,0,0,0,0,0,0,0,0,0,
    		 0,0,0,26,27,28,29,30,
    		 31,0,0,0,0,0,0,0,0,0,0,
    		 1,2,3,4,5,6,7,8,9,10,11,12,
    		 13,14,15,16,17,18,19,20,21,
    		 22,23,24,25,0,0,0,0,0,0,0,
    		 0,0,0,0,0,0,0,0,0,
    		 0,0,0,0,0,0,0,0,0,
    		 0,0,0,0,0,0,0
    	       };
    	int len=0,str_len=0;
    	char *decry;
    	len=strlen(input);
    	if ((len%8)==0) 
    		str_len=(len/8)*5;
		else 
			str_len=((len/8)+1)*5;
		 decry=(char *)malloc(sizeof(char)*str_len+1);
		 for (int i=0,j=0;i<len;i+=8,j+=5)
		 {
		 	decry[j]=(table[input[i]]<<3)|(table[input[i+1]]>>2);
		 	decry[j+1]=((table[input[i+1]]&0x3)<<6)|(table[input[i+2]]<<1)|(table[input[i+3]]>>4);
		 	decry[j+2]=((table[input[i+3]]&0xf)<<4)|(table[input[i+4]]>>1);
		 	decry[j+3]=((table[input[i+4]]&0x1)<<7)|(table[input[i+5]]<<2)|(table[input[i+6]]>>3);
		 	decry[j+4]=((table[input[i+6]]&0x7)<<5)|(table[input[i+7]]);
		 }
		 
		 switch(len%8)
		 {
		 	case 2:decry[str_len-1]='\0';
		 			decry[str_len-2]='\0';
		 			decry[str_len-3]='\0';
		 			decry[str_len-4]='\0';
		 			break;
		 			
		 	case 4:decry[str_len-1]='\0';
		 			decry[str_len-2]='\0';
		 			decry[str_len-3]='\0';
		 			break;
		 			
		 	case 5:decry[str_len-1]='\0';
		 			decry[str_len-2]='\0';
		 			break;
		 			
		 	case 6:decry[str_len-1]='\0';
		 			break;	
		 			
		 }
		 decry[str_len]='\0';
		 return decry;

 }
 
 int main()
 {
 	char buff[100],*encry,*decry;
 	printf("请输入要加密的字符:"); 
 	scanf("%s",buff);
 	encry=base32encry(buff);
 	printf("\n加密后的字符:%s",encry);
 	decry=base32decry(encry);
 	printf("\n解密后的字符:%s",decry);
 	return 0;
 }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Base-N 算法加密解密实现: 的相关文章

  • 现代控制理论基础总结

    现代控制理论基础总结 xff08 线性部分 xff09 学习现代控制理论也有两个月的时间了 xff0c 里面涉及的基础内容和公式十分之多 xff0c 所以现在对各部分基础知识作一个总结 1 控制系统的状态表达式 在现代控制理论中 xff0c
  • 题库(关于c++的网站都盘了)大盘点(好多没盘到)

    1 keda ac 2 hydro ac 3 luogu com cn 4 cplusplus com 5 leetcode cn 6 https loj ac 7 noi cn 8 ybt ssoier cn 8088 9 learncp
  • 利用MapReduce进行二次排序--附例子

    首先先来明确几个概念 xff1a 1 分区 partition 1 xff09 分区 xff08 partition xff09 xff1a 默认采取散列值进行分区 xff0c 但此方法容易造成 数据倾斜 xff08 大部分数据分到同一个r
  • MapReduce之单表关联Join输出祖父母、孙子---(附例子)

    需求 xff1a 一个文件 xff0c 有子女和对应的父母 xff0c 要求输出 祖父母 孙子 xff0c 文件如下 xff1a 单表关联 结果 xff1a child parent grand child Tom Lucy Alice T
  • 如何把 ubuntu 16.04.7 命令行界面下的系统语言更改为中文?

    如果你的 ubuntu 16 04 7 系统在命令行下的默认语言是英文 xff0c 比如下面这样 xff1a 怎么更改才能让某些输出单词显示成中文呢 xff1f 可以修改 etc default locale 这个文件 xff0c 先看一下
  • 小程序云开发实现订阅消息

    链接 简书博主示例 xff1a https www jianshu com p d90f22dac001 官方文档 xff1a 官方文档1 文档2 云调用 使用方法demo 假如这是一个点餐系统 xff0c 想让顾客下单以后 xff0c 派
  • ue4 常见问题解答

    1 如何让客户端自动连接服务器 span style color 0000aa MyGame span span style color 000066 span span style color 000066 exe span span s
  • Freertos代码之互斥信号量

    信号量用于限制对共享资源的访问和多任务之间的同步 三个信号量API函数都是宏 xff0c 使用现有的队列实现 使用例子 typedef void QueueHandle t typedef QueueHandle t SemaphoreHa
  • C语言冒泡排序和快速排序的思想和实现

    冒泡排序 基本思想 对有n个记录的序列进行冒泡排序 xff0c 首先将第一个数字与第二个数字进行比较 xff0c 若为逆序 xff0c 则将两个数字的顺序交换 然后比较第二个数字与第三个数字 xff0c 若为逆序 xff0c 则将两个数字的
  • CVPR2023最新论文 (含语义分割、扩散模型、多模态、预训练、MAE等方向)

    CVPR2023论文最新速递 xff01 含分割 VIT 点云等多个方向 2023 年 2 月 28 日凌晨 xff0c CVPR 2023 顶会论文接收结果出炉 xff01 CVPR 2023 收录的工作中 34 扩散模型 多模态 预训练
  • 【Hadoop基础教程】6、Hadoop之单表关联查询

    本blog主要通过输入文件中的child字段和parent字段进行单表关联查询 xff0c 推导出哪些用户具有child与grandparent关系 开发环境 硬件环境 xff1a Centos 6 5 服务器4台 xff08 一台为Mas
  • 自己完成一个简单的mapreduce程序

    hdfs上的数据源 search txt 我们这里依然使用讲解hive案例的那个数据源 xff0c 通过把hive执行的结果与我们自己写的mapreduce的结果作比较 xff0c 来验证是否编码正确 xff0c 以及能否正确理解mapre
  • ubuntu安装Beyond Compare 4 并破解

    1 官网下载 http www scootersoftware com download php ubuntu选择Linux下的Debian xff0c 32还是64位根据自己的系统下载 2 安装 sudo dpkg i 安装包 deb 3
  • Android部分监听器使用方法总结(一)之OnCLickListener

    ps 写在之前 1 小弟是以为android初学者 xff0c 在学习过程中遇到过一些新手都会遇到的问题 xff0c 希望能借助CSDN这个平台和各位前辈大牛已经同是菜鸟的同学们交流 这也是小弟第一次写博客 xff0c 名副其实的处女座吧
  • Welcome to Xiao

    Welcome to Xiao Hello Everyone xff01 这是我第一次使用 Markdown编辑器 所展示的欢迎页
  • QT_地图导航

    QT 地图导航 代码已经更新 xff1a http www cnblogs com douzujun p 6272667 html 1 地图显示功能 2 ifndef MAPWIDGET H 3 define MAPWIDGET H 4 5
  • 深度学习目标检测2013-2018单双阶段主流模型概览及详解

    背景 xff1a 深度学习引入目标检测领域以来 xff0c 给目标检测领域带来了很多突破性的进展 xff0c 文章 Deep Learning for Generic Object Detection A Survey 由香港中文大 国防科
  • NMS

    NMS 非极大值抑制 def NMS dects threshold dects x1 y1 x2 y2 score x1 61 dects 0 y1 61 dects 1 x2 61 dects 2 y2 61 dects 3 score
  • 我的2014点点滴

    我的2014点点滴 毕业篇 经历了6 43 3 43 3 43 4 43 2 5 61 18 5年的学校生活 xff0c 终于研究生毕业啦 xff01 2014年4月2日 xff0c 赶一晚上的火车 xff0c 回到了母校 xff0c 去领
  • OpenCV小例程——火焰检测(完整代码)

    火焰检测小程序 前几天 xff0c 偶然看到了An Early Fire Detection Method Based on Image Processing The Author is Thou Ho Chao Ho Chen Ping

随机推荐

  • “认知反映测试”——衡量一个人是“在短暂的思考后迅速解决问题”还是“通过一段长反射弧深思熟虑后再做决定”

    认知反映测试 衡量一个人是 在短暂的思考后迅速解决问题 还是 通过一段长反射弧深思熟虑后再做决定 有三个问题 xff1a 1 一副球拍和球成本1 10美元 球拍比球成本高1 00美元 问球多少美元 xff1f 2 如果五台机器生产五个零件需
  • 【选择排序的稳定版本与非稳定版本】

    选择排序 非稳定版本与稳定版本 排序过程中选择一个比较大 xff08 大到小排序 xff09 的数 xff0c 然后把它放到数组中指定的位置 xff1b 这时候可以直接与数组中指定位置交换数据 xff0c 但是可能会导致同值的数据的顺序发生
  • 机器人路径规划_人工势场法

    机器人路径规划 人工势场法 原理 人工势场法是由Khatib提出的一种虚拟力法 原理是 xff1a 将机器人在环境中的运动视为一种机器人在虚拟的人工受力场的运动 障碍物对机器人产生斥力 xff0c 目标点对机器人产生引力 xff0c 引力和
  • python中调用 imread 报错: ImportError: cannot import name imread

    现象 xff1a from scipy misc import imread imresize 报错 提示错误 ImportError cannot import name imread 但是import scipy的时候 显示正确 解决方
  • 改变python的默认路径为当前的工作路径

    改变python的默认路径为当前的工作路径 通过os模块来进行python中路径的更改 默认路径为 xff1a span class hljs prompt gt gt gt span span class hljs keyword imp
  • 无人驾驶技术——无人车的感官(激光雷达,雷达,摄像机)

    文章目录 激光雷达LIDAR什么是LIDARLIDAR原理LIDAR优点LIDAR缺点Velodyne激光雷达传感器HDL64每秒大约收集多少点 xff1f 雷达 RADARRADAR工作原理RADAR优点RADAR缺点 激光雷达 xff0
  • 机器学习——KNN

    机器学习算法 KNN KNN算法和KD Tree 思维导图
  • MATLAB:执行程序时调用bin文件夹下的.m文件,却显示找不到该文件

    在运行程序时 xff0c 明明要被调用的函数脚本就在当前文件夹bin 下面 xff0c 但是程序出错找不到对应的文件 xff0c 经过查询发现 xff1a 在命令行窗口输入 xff1a rehash toolboxcache 即可
  • 什么是定时器计数器

    定时器 计数器实际就是加1计数器 1 定时器和计数器的区别 xff1a 区别很小 xff0c 本质上都是计数器 xff0c 但定时器只是计数固定周期的脉冲 xff0c 所以根据频率可以计算出准确的时间 定时器模式 xff1a 对内部机器周期
  • 面试中问到动态库和静态库相关知识

    1 动态库相比较于静态库的优缺点 xff1f 动态库优点 xff1a 节省内存和代码重用 xff0c 当应用程序使用动态链接库时 xff0c 多个应用程序可以共享磁盘上的DLL xff08 windows xff09 和so linux 副
  • 【c++语法大全】

    C 43 43 基础入门 xff08 转载自黑马程序员 xff09 1 C 43 43 初识 1 1 第一个C 43 43 程序 编写一个C 43 43 程序总共分为4个步骤 创建项目创建文件编写代码运行程序 1 1 1 创建项目 Visu
  • Ubuntu20.04 USB网卡驱动安装 - MT7601u

    型号 xff1a TL WN725N 1 0 免驱版 芯片 xff1a MT7601u 具体型号可使用 96 lsusb 96 命令查看 确认型号为mt7601u后 执行如下命令 sudo apt install git build ess
  • 【浅谈插入排序】

    浅谈插入排序 插入排序 xff0c 是把无序数列中的数一个个插入到有序数列中 xff0c 直到无序数列没有数为止 比如有这么一个数列 xff1a 2 4 6 1 3 5 14 2 0 10 一共有10个数 xff0c 我们可以把第一个数当做
  • Meta Learning(元学习)详解

    元学习 概述基本概念基本分类 基本流程模型结构 概述 元学习 xff08 Meta Learing xff09 的提出是针对传统神经网络 模型的泛化性能不足 对信种类任务适应性较差的特点 主要表现为通过少量的计算和新训练数即可用于模型上实现
  • 2022 *CTF REVERSE 的 NaCl

    2022 CTF REVERSE 的 NaCl 下载附件 xff1a 照例扔入 exeinfope 中查看信息 xff1a 照例扔入虚拟机中运行一下 xff0c 查看主要回显信息 xff1a 照例扔入 IDA64 中查看伪代码 xff0c
  • python编码问题的一点笔记

    Python编码 xff1a 中文乱码问题 xff1a 如果开头不声明保存编码的格式是什么 xff0c 那么它会默认使用 ASCII 码保存文件 这时如果你的代码中有中文就会出错了 xff0c 即使你的中文是包含在注释里面的 声明中文编码格
  • 对 IDA 结构体操作的一些理解

    对 IDA 结构体操作的一些理解 前言 xff1a 刚学逆向时把 IDA pro 权威指南过了一遍 xff0c 但读得并不是很细 xff0c 满足日常使用还是没问题的 xff0c 但是对于一些细节的操作或提高效率的方法倒是没能掌握 比如 I
  • 第二届广东省大学生网络攻防大赛 pyre

    第二届广东省大学生网络攻防大赛 pyre 以前做过 pyc 逆向 xff0c 直接的 python exe 逆向还是第一次 xff1a 第一种方法 xff1a 用 pyinstxtractor py 将 exe 文件转换成 pyc 文件 用
  • 2022 年网刃杯 ez_algorithm

    2022 年网刃杯 ez algorithm 下载附件 xff1a 照例扔入 exeinfope 中查看信息 xff0c 64 位无壳 xff1a 照例运行一下 xff0c 查看主要回显信息 xff1a 照例扔入 IDA64 中查看伪代码
  • Base-N 算法加密解密实现:

    目录 Base N 算法加密解密实现 xff1a Base64 加密解密 xff1a xff08 C 语言 python xff09 Base32 加密解密 xff1a xff08 C 语言 xff09 Base N 算法加密解密实现 xf