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 使用解密代码解开得到

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值