简介
- base64其实很容易理解. 通常被加密后的内容是字节. 而我们的密文是用来传输的(不传输谁加密啊). 但是, 在http协议里想要传输字节是很麻烦的一个事儿. 相对应的. 如果传递的是字符串就好控制的多. 此时base64就应运而生了. 26个大写字母+26个小写字母+10个数字+2个特殊符号(+和/)组成了一组类似64进制的计算逻辑. 这就是base64了.。
base64原理
#http协议. 发送和接收字节. 都是很麻烦的一件事儿.
#\xFF\xEA\x08 ===》转换成二进制
#11111111 11101010 00001000
#把上面的字节的二进制, 重新排列. 每6个为一组
#111111 111110 101000 001000
#每一项的取值范围: 0-63 共64种情况
#s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
bs = b'\xFF\xEA\x08' # 字节
s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print(len(s))
s1 = s[63]
s2 = s[62]
s3 = s[40]
s4 = s[8]
print(s1 + s2 + s3 + s4) # /+oI
python处理base64
import base64
bs = b'\xFF\xEA\x08'
#
# 这里是把字节按照b64的规则进行编码
# b'/+oI'
s = base64.b64encode(bs).decode() # 编码之后的结果是字节.
print(s)
# 把b64还原回字节
s1 = "/+oI"
# 按照b64的规则. 解码成字节
bs = base64.b64decode(s1)
print(bs) # b'\xff\xea\x08'
#各种转换
# str.encode("字符集") -> 编码
ret = '哈哈'.encode()
print(ret) #b'\xe5\x93\x88\xe5\x93\x88'
# bytes.decode("字符集") -> 解码
s = ret.decode()
print(s) #哈哈
# base64.b64encode(字节).decode() -> 按照base64的规则进行编码, 编码的结果是字节,需要`还原`回字符串
s1 = base64.b64encode(ret).decode()
print(s1) # 5ZOI5ZOI
# base64.b64decode(字符串) -> 按照base64的规则进行解码. 解码的结果是 字节.
s2 = base64.b64decode(s1)
print(s2) # b'\xe5\x93\x88\xe5\x93\x88'
JS处理base64
// 浏览器端. 缺陷, 处理不了中文.
// btoa() => base64编码.
let r1 = btoa("mmmmmmm");
console.log(r1); // bW1tbW1tbQ==
// atob() => base64解码
let r2 = atob('bW1tbW1tbQ==')
console.log(r2);
// npm install crypto-js
var Base64 = require("crypto-js/enc-base64");
var CryptoJS = require("crypto-js");
let s = "我爱你";
let r3 = Base64.stringify(CryptoJS.enc.Utf8.parse(s));
console.log(r3.toString()); //5oiR54ix5L2g