美文网首页
base64是加密还是编码?我用JS来讲给你听。

base64是加密还是编码?我用JS来讲给你听。

作者: 刘大 | 来源:发表于2020-06-22 00:14 被阅读0次

是编码。

base64根本不是什么加密,就是一种编码方式,你问为什么,且听我细细道来。


二进制

我们都知道大家应该知道,机器语言一般都是二进制的,在一个字节(byte)上,是八个位(bit),每位上可以存放0或者1,通常一个字节可以存入一个ASCII码,两个字节存放一个国标汉字,现在大多数是UTF-8的编码,用的是三个字节。所以下面咱们以汉字为例,来说明base64为什么只是一种编码而不是一种加密方式。

以《现代汉语词典》第5版第一页第一个字“吖”为例,UTF-8编码下转为二进制,咱们先写一段简单的代码:

aToBinary.png

简单来说就是“吖”占用了三个字节,每个字节分别是229,144,150,转换为二进制编码就是“11100101 10010000 10010110”,共计二十四个位。

当使用base64编码之后,会以每三个字节为一组,把“11100101 10010000 10010110”转换成“111001 011001 000010 010110”,然后三字节就变成了四字节。用代码来写一下就是:

binaryToBase64.png

简单点来说就是三八二十四换成了四六二十四。那每个字节前面剩下的两个位,怎么办呢?嗯…我有10块,和我有00000010块,代表的意思一样,所以可以简单理解为在计算机中,没有就是0。

但凭空多了一个字节,有什么好处呢?因为base64编码每个字节只写了六个位,所以一共对应的只有2^6=64个可打印的字符(其实base64的64是这个意思啦),在Base64中的可打印字符包括字母A-Za-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。在JavaScript中,这两个字符是+/

所以先把“111001 011001 000010 010110”转换为十进制,咱们来简单的修改一下代码:

base64ToNum.png

按照编码表(第一位是0位,为A)就能知道“吖”转为base64之后是“5ZCW”。

那么我上面算的这些对不对呢?咱们来验证下,JavaScript提供了简单的方法:

aToBase64.png

所以反过来一样可以知道“5ZCW”是“吖”,这也是base64只是一种编码而不是一种加密方式的原因。

注意:在浏览器中可以直接使用btoa来直接把普通字符串转换成base64字符串,但无法转换汉字,这时候需要先额外把汉字转换成其他编码比如URI,但这样和直接转为base64的结果是不同的。

相关文章

  • base64是加密还是编码?我用JS来讲给你听。

    是编码。 base64根本不是什么加密,就是一种编码方式,你问为什么,且听我细细道来。 二进制 我们都知道大家应该...

  • iOS加密

    什么是加密? 加密 = 算法 + 钥匙 base64只是编码,不能归类于加密,base64编码原理 算法是固定且公...

  • java android 对接接口加密

    加密方式 方案1 使用Base64编码最常用的就是Base64编码了,Base64不算是加密,只是把字符经过编码变...

  • 常见编码加密解密Base64,URL ,GZIP,DES,RSA

    常见编码加密解密的基础用法 Base64编码 URL编码 GZIP AES加密 DES加密 RSA加密 编码 加密工具类

  • 关于加密解密

    1.base64:1>严格的说 base64 并不算是加密,只是一种编码的算法, base64 无论是加密还是解密...

  • DES加密 解密 java和iOS 保持一致

    1.java/android DES加密解密 base64编码用的jdk1.8 2.iOS DES加密解密

  • base64 编码

    注意:base64 只是一种编码,并不适合用来加密数据。 一、组成 base64 编码就是用 64 个可打印的字符...

  • iOS应用签名

    密码学简介 base64编码方案,不能用来加密,加密后的数据用base64来表示 HASH(散列函数)MD5SHA...

  • 自己用php实现base64编码(转载 )

    很多人误以为Base64是一种加密方式,其实不是加密,它只是一种编码方式,是可逆的。Base64编码,是我们程序开...

  • 前端js 加密解密方式

    一、base64加密使用JS函数的window.btoa()和 window.atob(),分别是编码和解码 二、...

网友评论

      本文标题:base64是加密还是编码?我用JS来讲给你听。

      本文链接:https://www.haomeiwen.com/subject/ukhtfktx.html