base64二次加密+异或

给定加密后的密文
给定keylength的范围
给定key中每个数的大小
求出原文?

本以为两次加密强度应该更高 没想到 也是一样的容易被破解啊
其原因在于第一次的base64加密得到的字符集是确定的
即’a’-‘z’ ‘A’-‘Z’ 0-9 +/=
so 可以根据这个暴力得出key的可能解 答案就显然了
代码中的注释是我一步步得到结果之后方便自己看而注释掉的

import base64
cipher='xxxxxxxxxxxxxxxxxxx'
first = base64.b64decode(cipher.encode())
print (first)
num = []
for i in range(len(first)):
    num.append(int(first[i]))
"""
xor = []
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/="
for i in range(len(num)):
    t = []
    for j in range(len(charset)):
        temp = num[i]^ord(charset[j])
        t.append(temp)
    t = list(set(t))
    xor.append(t)

key = []
for i in range(2,14):
    st = []
    for q in range(i):
        st.append([])
    for q in range(i):
        flag = 0
        for j in range(len(xor)):
            index = j%i
            if j%i==q:
                if flag==0:
                    st[j%i] = list(xor[j])
                    flag += 1
                else:
                    st[index]=list(set(st[index]).intersection(set(xor[j])))
mykey = [[65, 66], [220], [104, 108], [184, 188, 189], [245], [246], [203], [74]]

for i in range(len(mykey[0])):
    for j in range(len(mykey[1])):
        for q in range(len(mykey[2])):
            for k in range(len(mykey[3])):
                for l in range(len(mykey[4])):
                    for m in range(len(mykey[5])):
                        for n in range(len(mykey[6])):
                            for o in range(len(mykey[7])):
"""
ans = [[65,220,104,184,245,246,203,74],[65,220,104,188,245,246,203,74],[65,220,104,189,245,246,203,74],[65,220,108,184,245,246,203,74],[65,220,108,188,245,246,203,74],[65,220,108,189,245,246,203,74],[66,220,104,184,245,246,203,74],[66,220,104,188,245,246,203,74],[66,220,104,189,245,246,203,74],[66,220,108,184,245,246,203,74],[66,220,108,188,245,246,203,74],[66,220,108,189,245,246,203,74]]
def xxor(text,key):
    new_text=list(text)
    for i in range(len(text)):
        new_text[i]=key[i%len(key)]^text[i]
    return bytes(new_text)

def decode_base64(data):
    miss = 4 - len(data)%4
    if miss:
        data += b'=' * miss
    return base64.decodestring(data)
for i in range(len(ans)):
    temp = xxor(num,ans[i])
    temp = decode_base64(temp)
    temp = xxor(temp,ans[i])
    print (temp)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值