- A+
一、base64编码
base64就是一种基于64个可打印字符来表示二进制数据的表示方法,包含字符"A-Z、a-z、+、/"64个字符。编码表如下图:
base64编码原理:
base64由64个字符组成,使用6位即可表示,而一个字节由8位二进制组成,所以最后需要将8位拆分为6位二进制。
例如给定一个字符,首先需要对应ASCII码表的值,并将其转换为二进制,如“r”对应114,二进制为01110010。接着需要把8位二进制划分为6位,不足6位的在后面补零,使其是6的倍数。然后将其对应base64码表的字符,000000对应“=”即可。
例 01110010 (8位)
—>011100 100000 000000 000000 (6位)
—> 28 32 = = (十进制)
—> c g = = (base64码表符号)
即字符“r”进行base64编码后为“cg==”。
解码就是编码的逆过程:
首先去掉等号, 再根据base64码表将对应字符转为二进制数,然后从左到右, 每8 个位一组, 并将多余位扔掉, 转为对应的 ASCII 码即可。
base64隐写原理:
回顾上面的例子,图中红色部分就是隐写位(4位),因为解码过程中会丢掉多余的位(就是红色),所有在其中进行隐写不会影响解码的结果。
若把红色的位改成如下:
即字符“r”进行base64编码后为“co==”,解码结果仍然和“cg==”一样是字符“r”,所以在隐写位进行隐写不会修改最终的解码值。
接下来再举一例,编码字符“ro”
r o
01110010 01101111
—>011100 100110 1111100 000000 (红色代表隐写位,2位)
—> 28 38 60 =
—> c m 8 = (base64码表符号)
即字符“ro”进行base64编码后为“cm8=”。
从以上两个例子可以得出:若编码结尾有一个“=”,表示可隐写2位,两个“=”表示可隐写4位。
————————————————
版权声明:本文为CSDN博主「Rr.0」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/robacco/article/details/104867279
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫