如何识别一个字节字符串是否是一个 pickled 对象?
How to identify if a byte string is a pickled object?
如何识别字节字符串对象是否是 pickled 对象。
例如,在下面的字典中,如何识别 b
是 pickled 对象而其他对象不是?
example = {'a':1, 'b':b'\x80\x03K\x02.', 'c':b'3'}
虽然有一些方法可以判断流是否可能是泡菜流(例如第一个字节总是\x80
,后面跟着协议数字,这里是 \x03
,最后一个字节也总是 b'.'
),一般来说很难确定(第一个字节是 \x80
可能是巧合)随机字符串)。所以你最好简单地尝试解开它,看看是否可行:
import pickle
def is_pickle_stream(stream):
try:
pickle.loads(stream)
return True
except UnpicklingError:
return False
如果流是pickle流,上面的方法会returnTrue
,如果不是pickle流False
,如果loads
抛出异常则抛出异常(内存不足等)。
如何识别字节字符串对象是否是 pickled 对象。
例如,在下面的字典中,如何识别 b
是 pickled 对象而其他对象不是?
example = {'a':1, 'b':b'\x80\x03K\x02.', 'c':b'3'}
虽然有一些方法可以判断流是否可能是泡菜流(例如第一个字节总是\x80
,后面跟着协议数字,这里是 \x03
,最后一个字节也总是 b'.'
),一般来说很难确定(第一个字节是 \x80
可能是巧合)随机字符串)。所以你最好简单地尝试解开它,看看是否可行:
import pickle
def is_pickle_stream(stream):
try:
pickle.loads(stream)
return True
except UnpicklingError:
return False
如果流是pickle流,上面的方法会returnTrue
,如果不是pickle流False
,如果loads
抛出异常则抛出异常(内存不足等)。