uuencode 笔记

UUEncode 原理

Uuencode是二进制信息和文字信息之间的转换编码,也就是机器和人眼识读的转换。Uuencode编码方案常见于电子邮件信息的传输,目前已被多用途互联网邮件扩展(MIME)大量取代。

Uuencode将输入文字以每三个字节为单位进行编码,如此重复进行。如果最后剩下的文字少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6-bit为单位分为4个群组,每个群组以十进制来表示所出现的数值只会落在0到63之间。将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白...95-底线)的范围之中。

Uuencode编码每60个将输出为独立的一行(相当于45个输入字节),每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是“M”这个ASCII字符(77=32+45),最后一行的长度字符为32+剩下的字节数目这个ASCII字符。

Uuencode编码与base64编码类似,但base64将0~63之间的数字通过查表换字符,而Uuencode编码是直接将这个数字加上32转换为可打印字符。

C++ 实现

加密 - Encode

1
2
3
4
string encode(const string& plain)
{
return "有机会再实现";
}

解密 - Decode

1
2
3
4
string decode(const string& code)
{
return "有机会再实现";
}

Python 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
import uu

# 使用 uuencode 将 in_file 文件编码为 out_file 文件。
# 经过 uuencoded 编码的文件将具有指定 name 和 mode 作为解码该文件默认结果的标头。
# 默认值会相应地从 in_file 或 '-' 以及 0o666 中提取。
# 如果 backtick 为真值,零会用 '`' 而不是空格来表示。
uu.encode(in_file, out_file, mode=None, *, backtick=False)

# 调用此函数会解码 uuencod 编码的 in_file 文件并将结果放入 out_file 文件。
# 如果 out_file 是一个路径名称,mode 会在必须创建文件时用于设置权限位。
# out_file 和 mode 的默认值会从 uuencode 标头中提取。
# 但是,如果标头中指定的文件已存在,则会引发 uu.Error。
uu.decode(in_file, out_file=None, mode=None, quiet=False)

在线网站

  • https://www.qqxiuzi.cn/bianma/uuencode.php