加解密算法 之base64 原理

什么是base64:base64是一种常见的用于传输8Bit字节码的编码方式,是一种基于64个可打印字符来表示二进制数据的方法。

base64所用的字符为A到Z、a到z、0到9、+号符和/号符,他的索引(下标)从0开始,具体如下转换对照所示:

base64加密方法:

 1、 首先将需要加密的明文的每个字符依次翻译为二进制的ASII码,取八位(不足八位前面填充0补充)
 2 、然后将1中所有二进制组成一串长字符串,然后再将这个字符串以每六个为一组组成几个新的二进制数;如果最后一组二进制数不足六位,则在其后面加0凑成六位(每三个8Bit的字节转换为四个6Bit的字节,空余的bit用0补上)
 3、最后将这些二进制依次转换为十进制,这些十进制对应base64转换表中的索引,根据这些索引获取对应的字符组成的字符串就是密文(密文的个数必须为4的倍数,可以将其分为每4个一组,最后一组不足4的话添加=号补充完整)
 demo:
     明文:AllenYu
     1、首先将这个明文中的每个字符转换成二进制的ASII码(通过查询本文末尾处的ASII码对照表获取)
          A -> 01000001
          l   -> 01101100
          l   -> 01101100
          e  -> 01100101
          n  -> 01101110
          Y  -> 01011001
          u  -> 01110101
     2、 由1获得字符串:01000001011011000110110001100101011011100101100101110101
          将这个字符串以每六个一组,组成新的二进制,然后再将这些二进制转换成十进制,最后以这些十进制为索引找到相应的字符
          二进制:    010000  010110  110001  101100  011001  010110  111001  011001  011101  010000(最后一组补四个0)
          十进制:    16          22          49          44         25          22          57         25          29         16
          对应字符: Q           W           x            s           Z            W          5           Z            d            Q
     3、 由2得到编码:QWxs ZW5Z dQ 每4个一组,不足四个补=号 得到最终加密后的密文QWxsZW5ZdQ==

通过以上步骤可以得出,base64之后的字符串长度要比明文 长1/3 也就是变成了 4/3 倍长度。

 

位数不足情况
上面是按照三个字节来举例说明的,如果字节数不足三个,那么该如何处理?

å¨è¿éæå¥å¾çæè¿°

如果字节不足3个,要补足到3个,然后把这三个在拆分成4个字符。

两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。因此,上图中“BC”转换之后为“QKM=”;
一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。因此,上图中“A”转换之后为“QQ==”;
 

 

base64解密方法:

 1、 首先将base64加密后需要进行解密的密文(如末尾的有=号,将=号删除)的每个字符通过base64转换表找到索引,然后将这些索引转换为六位的二进制数(不足六位前面补充,凑足六位)
 2、 然后将1中所有二进制组成一个字符串,将这个字符串以每8个为一组,组成几个新的二进制数;如果最后一组不足8个,则这组全部删除(字符长度取模8得到余数,末尾去除这个余数相应的个数的字符)
 3、 通过查找ASII码对照表,找到2中所有二进制所对应的字符,这些字符就是解密后的明文
 demo:
     密文:QWxsZW5ZdQ==
     1、 将结尾的两个=去除,并通过字符去编码表找到对应下标并转换为二进制(六位的)
          字符:                  Q            W          x            s            Z          W           5            Z           d           Q
          对应索引:           16           22         49          44          25         22          57          25         29         16
          索引对应二进制: 010000  010110  110001  101100  011001  010110  111001  011001  011101  010000
     2、由1得到字符串:010000010110110001101100011001010110111001011001011101010000
          每八个一组,组成多个二进制(最后一组不足八个的话,最后一组删除)
          01000001  01101100  01101100  01100101  01101110  01011001  01110101  0000
          最后一组只有四个字符,删除
          二进制:              01000001  01101100  01101100  01100101  01101110  01011001  01110101
          ASII码十进制:    65             108            108           101            110            89              117
          对应ASII码字符:A                l                 l                e                 n               Y                u
          得到最终解密明文:AllenYu
 

 

出现的原因

目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?

在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。
 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JWT(JSON Web Token)是一种用于在网络应用间安全传输信息的开放标准。JWT 由三部分组成:头部(header)、载荷(payload)和签名(signature)。 在 JWT 中,使用非对称加密算法来实现签名验证。非对称加密算法使用了一对密钥,包括私钥和公钥。私钥用于生成签名,公钥用于验证签名的有效性。 下面是 JWT 的非对称加密原理: 1. 客户端发送请求时,服务器返回一个 JWT。 2. JWT 由三部分组成,分别是头部、载荷和签名,它们通过点号(.)连接在一起。 3. 头部包含算法类型和令牌类型等信息,例如: ``` { "alg": "RS256", "typ": "JWT" } ``` 4. 载荷包含要传输的数据,例如用户的身份信息,例如: ``` { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } ``` 5. 签名是由头部、载荷和私钥生成的,例如: ``` HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secretKey ) ``` 或者使用非对称加密算法生成签名: ``` RSASHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), privateKey ) ``` 6. 客户端将生成的 JWT 发送给服务器作为身份认证凭证。 7. 服务器接收到 JWT 后,通过公钥来验证签名的有效性,确保 JWT 的完整性和真实性。 8. 如果签名验证通过,服务器使用私钥对 JWT 进行解密,获取其中的信息。 通过使用非对称加密算法和私钥签名,JWT 实现了身份验证和信息传输的安全性。在验证签名时,服务器可以根据公钥来验证,而不需要直接访问私钥。这种方式可以确保 JWT 的安全性,并防止篡改和伪造。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值