如何解决^ 不支持的操作数类型:'bytes' 和 'bytes' 与 XOR
我在关闭之前问过这个问题作为重复我尝试了重复链接但没有任何效果。
完整代码:
import requests
import base64
import urllib.parse
import operator
username = "badministrator"
password = "Password1"
URL = "http://url/login.PHP"
values = {'username' : username,'password' : password}
def first_login(url_login,value):
with requests.Session() as c:
c.post(url_login,data = value)
response = c.get(url_login,verify=False,allow_redirects=True)
Cookie = [value for key,value in c.cookies.get_dict().items()]
cookie,IV = Cookie
return cookie,IV
def base64_decode():
cookie,IV = first_login(URL,values)
decode_cookie = base64.b64decode(urllib.parse.unquote_to_bytes(cookie))
decode_IV = base64.b64decode(urllib.parse.unquote_to_bytes(IV))
return decode_cookie,decode_IV
def xor_exp():
decoded_cookie,decoded_IV = base64_decode()
decoded_IV[0] = bytes(map(operator.xor,b'a',b'b',decoded_IV[0]))
decoded_cookie[0] = b'a'
return decoded_IV,decoded_cookie
print(xor_exp())
我无法以字节为单位进行迭代,也无法将三口异或在一起
解决方法
bytes
是不可变的,所以如果你想改变它们的内容,你可以构造一个新的 bytes
对象(就像你对字符串或元组所做的那样)或创建一个 bytearray
.我将在下面展示它们:
def xor_exp():
decoded_cookie,decoded_IV = base64_decode()
decoded_IV = bytes([3 ^ decoded_IV[0]]) + decoded_IV[1:]
decoded_cookie = b'a' + decoded_cookie[1:]
return decoded_IV,decoded_cookie
def xor_exp():
decoded_cookie,decoded_IV = base64_decode()
decoded_cookie = bytearray(decoded_cookie)
decoded_IV = bytearray(decoded_IV)
decoded_IV[0] = 3 ^ decoded_IV[0]
decoded_cookie[:1] = b'a'
return bytes(decoded_IV),bytes(decoded_cookie)
尝试 2:
如果您知道 bytes
对象只包含一个字符,我会简单地对它们调用 ord
:
decoded_IV[0] = ord(b'a') ^ ord(b'b') ^ decoded_IV[0]
其中,给定这些特定值等于
decoded_IV[0] = 3 ^ decoded_IV[0]
尝试 1:
Python 中不能直接异或 bytes
对象,但可以对 int
对象进行异或,并且 bytes
实现 Iterable[int]
,这意味着你可以:
import operator
...
decoded_IV[0] = bytes(map(operator.xor,b'a',b'b',decoded_IV[0]))
这使用了标准库函数 operator.xor
和内置函数 map
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。