UUencode编码

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_fileout_filename=Nonemode=None**, backtick=False*)

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

在 3.7 版更改: 增加 backtick 形参。

uu.decode(in_fileout_file=Nonemode=Nonequiet=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)

  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值