1.UUencode编码
将二进制转化为文本,起源于UNIX系统用户之间使用,通常用于文件和二进制新闻。
2.加密:
- 将二进制进行分组,3个字节为一组(24bit),位数不足用0补位
- 进行二次分组,6bit为一组,分为4的倍数组,然后将每组的二进制数变为十进制数,在ASCLL编码表中范围0-63
- 计算出来的十进制数加32,ASCLL编码表范围变为32-95
3.注意
- 60个输出为独立的一行,每行前面都加一个长度符号M,除最后一行。
- 编码的文件开头有begin xxx 文件名,结尾有end,例:
Uuencoded 数据以以下形式出现的行开头:
begin <mode> <文件>
这里
<mode> 是文件的读/写/执行权限
<file> 是重新创建二进制数据时要使用的名称
示例:开始 644 myfile.zip
4.与base64的不同:有-没有/
5.Python脚本
def uuencode():
str = input("请输入需要编码的字符:")
data = ""
# 将字符串中的每个字母以二进制的形式变成ASCALL码
for c in str:
a = format(ord(c), 'b')
for i in range(8 - len(a)): # 如果a的长度不够8,就会一直循环,补0
a = "0" + a
data = data + a # 然后将a加到data
if len(data) % 24 != 0:
length = len(data)
for i in range(24 - length % 24):
data = data + "0"
print(chr(32 + int(len(data) / 8)), end="")
for i in range(0, len(data), 24):
data_1 = data[i:i + 24]
for j in range(0, len(data_1), 6):
if int(data_1[j:j + 6], 2) == 0:
print(chr(int(0x60)))
else:
print(chr(int(data_1[j:j + 6], 2) + 32), end="")
def uudecode():
str = input("请输入需要解码的字符:")
data = ""
for c in str[1:]: # 不需要第一个字符
a = format(ord(c) - 32, 'b') # ASCALL码先减去32再转换为二进制
for i in range(6 - len(a)): # 如果二进制不到六位,用“0”在字符串前面补齐
a = "0" + a
data = data + a
for i in range(0, len(data), 24):
data_1 = data[i:i + 24] # 每24位截取一次
for j in range(0, len(data_1), 8): # 二十四个中每八个截取
print(chr(int(data_1[j:j + 8], 2)), end="")
if __name__ == "__main__":
uudecode()
print()
uuencode()
6.python库实现
uu 模块定义了以下函数:
uu.encode
(in_file, out_file, name=None, mode=None, **, backtick=False*)使用 uuencode 将 in_file 文件编码为 out_file 文件。 经过 uuencoded 编码的文件将具有指定 name 和 mode 作为解码该文件默认结果的标头。 默认值会相应地从 in_file 或
'-'
以及0o666
中提取。 如果 backtick 为真值,零会用'`'
而不是空格来表示。在 3.7 版更改: 增加 backtick 形参。
uu.decode
(in_file, out_file=None, mode=None, quiet=False)调用此函数会解码 uuencod 编码的 in_file 文件并将结果放入 out_file 文件。 如果 out_file 是一个路径名称,mode 会在必须创建文件时用于设置权限位。 out_file 和 mode 的默认值会从 uuencode 标头中提取。 但是,如果标头中指定的文件已存在,则会引发 uu.Error。
如果输入由不正确的 uuencode 编码器生成,decode() 可能会打印一条警告到标准错误 ,这样 Python 可以从该错误中恢复。 将 quiet 设为真值可以屏蔽此警告。
exception
uu.Error
Exception 的子类,此异常可由 uu.decode() 在多种情况下引发,如上文所述,此外还包括格式错误的标头或被截断的输入文件等。
7.在线网站:
CTF在线工具-在线UUencode编码|UU编码|UUencode解码|UUencode编码原理|UUencode编码算法 (hiencode.com)
参考文章:
uuencode实现(加密解密)_unnencode解密-CSDN博客
Python 标准库 - uu — 对 uuencode 文件进行编码与解码 - 《Python 3.10.0 官方文档(全)》 - 书栈网 · BookStack
什么是 Uuencode (Uuencode/Uudecode) 命令,它是如何工作的? (techtarget.com)