下你所需,载你所想!
汇集开发技术源码资料

C++之base64编码解码,可以对中文加密,通过OD分析

:151B :1 :2023-02-03 14:40:22

部分简介

主要讲解:
base64的原理及实现
ascii与二进制的转换
OD如何分析base64加密
32位程序的存储方式,32个二进制,而不是8个,这是我踩得一个坑
视频录的不是很好,太紧张了,再加上发现昨天代码bug,整个人都不好了,所以匆匆结束了。
未讲部分:
base64的简单判断与识别,昨天的文章其实有提过,加密逻辑不会变
那个cm程序是通过把我输入的字符串进行base64编码,然后把密文字符串解码,然后进行比较(现在的序列号保护大多不会直接明文比较)
得到如下知识:
1)Base64使用A--Z,a--z,0--9,+,/ 这64个字符.
2)编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了.
3)解码原理:将4个字节转换成3个字节.先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位.这样就还原了.
解码原理是将4个字节转换成3个字节,反过来就是解码,后面的左移,右移运算又是什么了,还是有些糊涂,接下来用代码模拟一遍。
算法的变形及识别
base64可以对中文加密,当然了我这段代码并没有对中文处理,在处理前判断是中文或者英文字符就可以了,例如在ASCII码,32位平台中,一个中文有两个字节表示,一般是负数,为了base64能够对其处理,可以将其加上128,然后再行处理,这里就不在重复编码了。
然后我们看,这个加密方式是有一个码表的,那么我们就可以自由的更改码表,让在线的解密平无法解密,或者解密出的明文不对。
那么如何识别base64,==号可以换成别的,码表也可以换,但是加密逻辑是固定的(换了就不叫base64加密了)。
例如:3个字符加密后是4个,4个字符加密后是8个,且末尾两个字符相同,无论密文位数怎么改变,都是4的倍数,并且相同字符加密后的密文绝对一样,例如输入6个1,输出每三个字符必然一样!

C++之base64编码解码,可以对中文加密,通过OD分析

热门推荐

相关文章