下面是我看了别人贴出来的东西后的理解总结:
重要!
Base64编码并不意味着提供安全性
Base64编码不是用来压缩数据的
为什么使用Base64
Base64是数据的文本表示形式,仅由64个字母数字字符(小写和大写)、+、/和=组成。
这64个字符被认为是“安全的”,也就是说,与<、> \n和许多其他字符不同,它们不会被传统计算机和程序误解。
什么时候Base64有用
我发现base64在以文本形式传输文件时非常有用。获取文件的字节并将它们编码为base64,传输base64字符串,从接收端执行相反的操作。
这与在电子邮件期间通过SMTP发送附件时使用的过程相同。
如何执行base64编码/解码
从base64文本到字节的转换称为解码。
从字节到base64文本的转换称为编码。这与其他编码/解码的命名方式略有不同。
Dotnet 和 Powershell
微软的Dotnet框架支持将字节编码和解码到base64。在mscorlib库中查找Convert名称空间。
下面是你可以使用的powershell命令:
// Base64 encode PowerShell
// See: https://adsecurity.org/?p=478
$Text='This is my nice cool text'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText = [Convert]::ToBase64String($Bytes)
$EncodedText
// Convert from base64 to plain text
[System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('VABoAGkAcwAgAGkAcwAgAG0AeQAgAG4AaQBjAGUAIABjAG8AbwBsACAAdABlAHgAdAA='))
Output>This is my nice cool text
Bash有一个内置的base64编码/解码命令。你可以这样使用它:
编码到base64:
echo 'hello' | base64
解码base64编码的文本为普通文本:
echo 'aGVsbG8K' | base64 -d
Node.js也支持base64。下面是一个你可以使用的类:
/**
* Attachment class.
* Converts base64 string to file and file to base64 string
* Converting a Buffer to a string is known as decoding.
* Converting a string to a Buffer is known as encoding.
* See: https://nodejs.org/api/buffer.html
*
* For binary to text, the naming convention is reversed.
* Converting Buffer to string is encoding.
* Converting string to Buffer is decoding.
*
*/
class Attachment {
constructor(){
}
/**
*
* @param {string} base64Str
* @returns {Buffer} file buffer
*/
static base64ToBuffer(base64Str) {
const fileBuffer = Buffer.from(base64Str, 'base64');
// console.log(fileBuffer)
return fileBuffer;
}
/**
*
* @param {Buffer} fileBuffer
* @returns { string } base64 encoded content
*/
static bufferToBase64(fileBuffer) {
const base64Encoded = fileBuffer.toString('base64')
// console.log(base64Encoded)
return base64Encoded
}
}
你会得到这样的文件缓冲区:
const fileBuffer = fs.readFileSync(path);
或像这样:
const buf = Buffer.from('hey there');
你也可以使用API为你做编码和编码,这里有一个:
要进行编码,需要传入纯文本作为主体。
文章https://mk34rgwhnf.execute - api.ap -南- 1. - amazonaws.com/base64编码
要解码,传入base64字符串作为主体。
文章https://mk34rgwhnf.execute - api.ap -南- 1. - amazonaws.com/base64解码
幻想的例子,当你可能需要base64
这里是一个牵强附会的场景,您可能需要使用base64。
假设你是一名间谍,你的任务是复制并拿回一张有价值的照片,带回你国家的情报机构。
这张照片是在一台不能上网也没有打印机的电脑上拍摄的。你手里只有一支笔和一张纸。没有闪盘,没有CD等等。你会怎么做?
你的第一个选择是把图片转换成二进制的1和0,把这些1和0一个一个地复制到纸上,然后跑过去。
然而,这可能是一个挑战,因为只使用1和0作为字母表来表示一张图片会导致很多1和0。你的纸太小了,你没有时间。另外,1和0越多,出错的几率就越大。
第二个选择是使用十六进制而不是二进制。十六进制允许16个而不是2个可能的字符,所以你有一个更宽的字母表,因此更少的纸张和时间所需。
更好的选择是将图片转换为base64,并利用另一个更大的字符集来表示数据。更少的纸和更少的时间来完成。好了!