c语言字符加密向后四位_Base64加密?它只是一种编码算法,切勿用来加密

说起来Base64编码,很多人都把他当做加密算法来使用,殊不知它只是一种编码而已,如果你用它来进行网络通讯加密,很容易被破解哦,切记,它不是加密算法。

Base64的由来

为什么叫Base64呢?因为它仅支持64位可打印字符(52位英文大小写字母,10位数字及+、/),如下图:

a9ef4212afeeffc0a8ac2f76207d3147.png

早期的传输协议,例如邮件SMTP只能传送可打印的ASCII码,导致原来8bit(0~255)超过了ASCII所表示的范围(ASCII共127个字符,0-31和127为控制字符或者通信专用(共33),32-126为可打印字符(共95)).假设我们通过邮件传输有个图片,其中有个byte的值为10111011,对应的10进制为187,超过了ASCII码的范围,传输则为乱码,图片则不能被正常解析和显示,就像我们用记事本打开图片一样,你总会看到乱码。

为此,Base64诞生了,用6位来表达原来的8位字符,把原本ASCII或者超出其范围的字符转换成可打印的字符。

那么如何解决8位字符和6位字符的转换呢(即Base64编码)

我们知道6和8的最小公倍数为24,嗯,我们可以用4个6位字符表示3个8位的字符了,如下图:

18de8151f8d5b5a0bc5bdc51aab6508b.png

最终的8bit的字符Man转为了6bit的TWFu,此时有个问题,如果原本的8bit字符的总长度不是3的倍数怎么办?假设原8bit的字符总长度为32,在转为6bit时,还剩余2位,此时就直接在后四位补0,凑够36位,在Base64中,如果找不到匹配的Base64可打印字符,则用=表示。

如下图:[M ],转为Base64编码则为:TQ==

592e56b8df8f28528fac9c19c9031dd7.png

Base64解码

解码即编码的逆过程,此处不多讲了。

为啥不能用来加密

通过编码和解码我们知道任何人都可以将编码后的信息解码出完全一样的结果,也就起不到保密的效果了。

java中可用的工具

JDK1.8之后引入了Base64这个类,可以简单的通过这个工具类实现编码、解码工作。

a858ff35fa6821320fa6e0893eed5e88.png

除此之外Appche Commons Codec也提供了对应的工具类

effd4b4e8587d441676782b1c9b47bdf.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值