当前位置 博文首页 > 文章内容

    b32/64encode详解

    作者: 栏目:未分类 时间:2020-08-14 17:52:55

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    以前只是用这些函数,从没想过这些编码的原理;还是因为一道ctf题让我好好的了解了一下这些编码方式!

    一、b32encode

    我们知道每个字节是8比特,b32encode将5个字节分成8块,每块前三位补0,从而将5个字节扩展为8个字节;那么扩展后的每个字节的值不超过32,与32个字符"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"对应,有时我们发现编码的字符串中还有"="这个字符,但是它是填充字符,以上就是b32encode;用Python写一个脚本来帮助理解:

    from string import uppercase,digits
    from base64 import b32encode
    
    def my_b32encode(s):
        base=uppercase+digits[2:8]
        assert(len(s))==5
        bs=''.join([bin(ord(x))[2:].rjust(8,'0') for x in s])
        assert len(bs)==40
        sbs=[bs[5*ind:5*(ind+1)] for ind in range(8)]
        re=[base[int(x,2)] for x in sbs]
        return ''.join(re)
    
    if __name__=='__main__':
        print my_b32encode('BITSC')
        print b32encode('BITSC')
    

    二、b64encode

    b64encode将3个字节分成4块,每块前两位补0,从而将3个字节扩展为4个字节;那么扩展后的每个字节的值不超过64,与64个字符 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/+"对应,同样地,"="作为填充字符,以上就是b64encode;用Python写一个脚本来帮助理解:

    from string import uppercase,lowercase,digits
    from base64 import b64encode
    
    def my_b64encode(s):
        base=uppercase+lowercase+digits+'/+'
        assert len(s)==3
        bs=''.join([bin(ord(x))[2:].rjust(8,'0') for x in s])
        assert len(bs)==24
        sbs=[bs[6*ind:6*(ind+1)] for ind in range(4)]
        re=[base[int(x,2)] for x in sbs]
        return ''.join(re)
    
    if __name__=='__main__':
        print my_b64encode('BIT')
        print b64encode('BIT')