Base64 原理 及 Base64 隐写

2021/10/20 23:16:13

本文主要是介绍Base64 原理 及 Base64 隐写,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Base64由 a-z 、A-Z 、+ 、/ 、=组成,= 为填充字符。

索引对应字符索引对应字符索引对应字符索引对应字符
0A  17R34i51z
1B18S35j520
2C19T36k531
3D20U37l542
4E21V38m553
5F22W39n564
6G23X40o575
7H24Y41p586
8I25Z42q597
9J26a43r608
10K27b44s619
11L28c45t62+
12M29d46u63/
13N

30

e47v
14O31f48w
15P32g49x
16Q33h50y

Base64把三个8bit的字节转换成四个6bit的字节。例如:

 倘若字符串的长度不为3的倍数时,则在该字符串二进制后添加 0 使字节数为6的倍数,然后在编码后的字符串后添加 1-2 个 = 。例如:

而Base64隐写就是利用红框中的这几位

因此使用 "QnZibVY= " 或是 "QnZibVa=" 解密均为 "BvbmV"

解密代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10000
int main()
{
	int n,m,p=0,k,t,c[MAX];
	char a[MAX],b[100]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	freopen("d:\\stego.txt","r",stdin);
	while (scanf("%s%*c",a) !=EOF )
	{
		m=strlen(a);
		if (a[m-1]!='=')
			continue;
		if (a[m-2]=='=')
		{
			for (n=0;n<64;n++)
				if (b[n]==a[m-3])
					break;
			k=32;
			while (k!=0)
			{
				if (k<=n)
				{
					n-=k;
					if (k<16)
						c[p++]=1;
					k/=2;
					continue;
				}
				if (k<16)
					c[p++]=0;
				k/=2;
			}
		}
		else
		{
			for (n=0;n<64;n++)
				if (b[n]==a[m-2])
					break;
			k=32;
			while (k!=0)
			{
				if (k<=n)
				{
					n-=k;
					if (k<4)
						c[p++]=1;
					k/=2;
					continue;
				}
				if (k<4)
					c[p++]=0;
				k/=2;
			}
		}
		memset(a,0,sizeof(a));
	}
	for (n=0;n<p;n+=8)
	{
		for (m=0,t=128,k=0;m<8;m++)
		{
			if (c[n+m]==1)
				k+=t;
			t/=2;
		}
		printf("%c",k);
	}
	return 0;
}

以攻防世界 MISC 中 新手练习区 base64stego 为例:

首先得到一个伪加密的压缩包,使用WinRAR 工具选项卡中 修复文件解开伪加密得到 stego.txt 文件 stego.txt 文件打开后均为base64

解密后发现为base64隐写的介绍 使用base64隐写解码程序

 把 stego.txt 使用解密代码解开得到

 



这篇关于Base64 原理 及 Base64 隐写的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程