阅读其他人发布的内容后,我对Base64编码有了以下理解:
重要!
Base64编码不是为了提供安全性。
Base64编码不是为了压缩数据。
我们为什么使用Base64
Base64是一种文本表示法,由只包含64个字符的字符集组成,这些字符是大小写字母、数字以及+、/和=。
这64个字符被认为是“安全”的,也就是说,它们不像<、> \n等字符那样容易被旧的计算机和程序误解。
Base64何时有用
在将文件作为文本传输时,我发现Base64非常有用。您可以获取文件的字节并将其编码为Base64,然后传输Base64字符串,接收方则进行相反操作。
这与通过电子邮件发送附件时使用的过程相同。
如何执行Base64编码/解码
从Base64文本转换为字节称为解码。
从字节转换为Base64文本称为编码。这与其他编码/解码的命名方式略有不同。
Dotnet和Powershell
Microsoft的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编码:
bash命令行中输入:
```bash
echo 'your message' | base64
```
将 "your message" 替换为您要编码的消息。
echo 'hello' | base64
将base64编码的文本解码为普通文本:
echo 'aGVsbG8K' | base64 -d
Node.js也支持base64编码。下面是一个可以使用的类:
class Attachment {
constructor(){
}
static base64ToBuffer(base64Str) {
const fileBuffer = Buffer.from(base64Str, 'base64');
return fileBuffer;
}
static bufferToBase64(fileBuffer) {
const base64Encoded = fileBuffer.toString('base64')
return base64Encoded
}
}
你可以这样获得文件缓冲区:
const fileBuffer = fs.readFileSync(path)
或者像这样:
const buf = Buffer.from('hey there');
你还可以使用 API 来进行编码和解码,以下是其中之一:
要进行编码,将原始文本作为正文传递。
POST https://mk34rgwhnf.execute-api.ap-south-1.amazonaws.com/base64-encode
要进行解码,请将 base64 字符串作为正文传递。
POST https://mk34rgwhnf.execute-api.ap-south-1.amazonaws.com/base64-decode
使用 base64 的虚构示例
这里是一个很牵强的场景,描述了何时可能需要使用 base64。
假设你是一名间谍,正在执行任务,需要复制并带回一张非常有价值的图片以供你国家的情报机关使用。
这张图片存储在一台没有网络访问权限和打印机的计算机上。你手头只有一支笔和一张纸。没有闪存,没有光盘等。那么你该怎么办呢?
你的第一个选择是将图片转换成二进制的 0 和 1,然后逐个复制到纸上,然后就可以离开了。
然而,这可能会很困难,因为仅使用 0 和 1 作为字母表来表示图片将导致非常多的 0 和 1。你的纸张很小,而且时间也不充足。此外,0 和 1 越多,出错的机会越大。
你的第二个选择是使用十六进制代替二进制。十六进制允许有 16 种可能的字符,因此你拥有更广泛的字母表,需要的纸张和时间更少。
更好的选择是将图片转换为 base64,并利用另一个更大的字符集来表示数据。用的纸张更少,完成所需时间更短。就是这样!