uuencode实现(加密解密)

Uuencode将输入文字以每三个字节为单位进行编码,如此重复进行。如果最后剩下的文字少于三个字节,不够的部份用零补齐

这三个字节共有24个Bit,以6-bit为单位分为4个群组,每个群组以十进制来表示所出现的数值只会落在0到63之间。将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白...95-底线)的范围之中,且Uuencode编码每60个将输出为独立的一行(相当于45个输入字节)

每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是“M”这个ASCII字符(77=32+45),最后一行的长度字符为32+剩下的字节数目这个ASCII字符(重点:就算一行也要加长度)

def uuencode():
    str=input("请输入需要编码的字符:")
    data=""
    for c in str:
        a=format(ord(c), 'b')
        for i in range(8-len(a)):
            a="0"+a
        data=data+a

    if(len(data)%24!=0):
        lenght=len(data)
        for i in range(24-lenght%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')//acsii码先减去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()

此代码仅供一行之内的加密解密(即六十个字符解码,和四十五的字符编码)

运行实例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值