什么是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、网页传输少量二进制文件中也有相应的使用。

加解密算法 之base64 原理相关推荐

  1. (转)base64编码(严格说来,base64不算作加解密算法)

    [README] 1.本文转自: Java base64加密解密 - xuwc - 博客园参考: https://www.cnblogs.com/luguo3000/p/3940197.html ht ...

  2. DES加解密算法原理详解与实现

    [DES密码编写] 1. Equipment (1) operating system version :WIN 10 (2) CPU instruction set: x 64 (3) softwa ...

  3. 程序猿成长之路番外篇之前后端加解密(rsa+aes混合加解密算法)

    今年国庆前夕接手一个外部项目,说是要保障接口数据安全,数据安全相对容易些,接口安全嘛emmmmm, 这个要考虑加解密算法.白名单之类的问题了.于是打算今天搞一期接口安全为题的成长之路番外篇. 为什么要 ...

  4. Android金融支付常见加解密算法及安全防护

    引言 因为本人从事的金融 IC 卡和移动支付相关的开发工作,在日常研发过程中,对 APP 信息安全防护方面尤为重视,所以现总结下金融支付相关的加解密算法以及常见的安全防范措施. Android 端常见 ...

  5. 加解密算法的概述和总结

    加解密算法的概述和总结 一.单向散列算法 也称为Hash(哈希)算法.是一种将任意长度的消息压缩到某一固定长度(消息摘要)的函数(该过程不可逆).Hash函数可用于数字签名.消息的完整性检测.消息起源 ...

  6. python中凯撒密码_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  7. kotlin写的加解密算法,包括模式和填充方式

    DES加密 DES是一种对称加密(Data Encryption Standard)算法. DES算法一般有两个关键点,第一个是加密算法,第二个是数据补位. 加密算法常见的有ECB模式和CBC模式: ...

  8. php aes 256 加解密,PHP完整的AES加解密算法使用及例子(256位)

    依赖PHP自身的mcrypt扩展 class aes { // CRYPTO_CIPHER_BLOCK_SIZE 32 private $_secret_key = 'default_secret_k ...

  9. radius pap 加/解密算法实现-golang

    radius pap 加/解密算法实现-golang pap 认证 pap: Password Authentication Protocol 口令认证协议 PAP认证过程非常简单,二次握手机制,使用 ...

  10. 凯撒加密的python语言程序_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

最新文章

  1. HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
  2. day34 异常处理、断言、socket之ftp协议
  3. Python:名片管理系统
  4. Vulkan Tutorial 14 Integration pipeline
  5. H5开发开发利器——flex
  6. 最大匹配 人员分配[邻接表]
  7. 什么插件格式化文档_推荐15款IntelliJ IDEA 神级插件
  8. 关于WCF、WebAPI、WCFREST、WebService之间的区别总结
  9. LeetCode(#118)————杨辉三角形
  10. Http Ajax技术哪家强?Axios、Superagent、Request、Fetch、Supertest技能大比拼!
  11. [深度学习-TF2实践]应用Tensorflow2.x训练DenseNet模型在Cifar10数据上,测试集准确率90.07%
  12. 谷歌技术三宝之MapReduce(转)
  13. 相等变为1 编号_JavaScript 中的 4 个相等比较算法的介绍
  14. myeclipse中删除tomcat 的server后,重新添加进来的方法
  15. Linux基本命令(一)
  16. 一起学Hive——总结复制Hive表结构和数据的方法
  17. C语言实现-航空订票系统(飞机订票系统)单机版联网版
  18. CDN - 原理解析
  19. [原创]修改jquery.slideBox.js插件,自定义部分事件
  20. 刘雨昕成为Swisse斯维诗胶原蛋白系列代言人

热门文章

  1. Java程序设计(面向对象)- 基本概念
  2. delphi cxgrid读取本地image_读取多个(海康\大华)网络摄像头的视频流 (使用opencv-python),解决实时读取延迟问题...
  3. 计算机播放qq音乐没声音怎么办,电脑突然没声音了.开启QQ音乐说要检查音效卡驱动程式设定是否正常....
  4. 【设计鉴赏】张艺谋《影》震撼人心的海报设计
  5. 360杀毒软件安装在windows2003系统的解决方法
  6. 二本华南师范计算机考研,经验贴|19华师软工专硕|初试415,二本逆袭211
  7. 人人商城V3配置添加对接威信小程序直播,前后端教程。
  8. Python常用的第三方模块(python第三方库)
  9. NGINX集群+KeepLived实现高可用
  10. ubuntu 16.04 wps安装教程