Python中如何将字符串形式的bytes数据转换回原bytes类型?
解决方案
你遇到的情况本质是直接将bytes对象的字符串表示(也就是repr(key)的结果)存入了Cookie,最终读出来的是带b'前缀、引号包裹的字符串格式字面量,有两种常用方案可以还原为原始bytes类型密钥:
方法1:字符串切片处理(无需额外导入,最安全)
不需要依赖任何第三方库,手动修剪字符串多余字符即可完成还原:
# 假设从Cookie读取到的内容为 cookie_key = "b'BNdXABgpo_Y5PH3VNpSfAJo8Y7A-vdTTIN5WJxYRgpk='" # 第一步:去除外层的双引号(如果实际读取结果没有外层引号可以跳过这步) trimmed_key = cookie_key.strip('"') # 第二步:去掉开头的`b'`和结尾的`'`,提取核心密钥字符串 raw_key_str = trimmed_key[2:-1] # 第三步:编码为bytes类型得到原始密钥 original_key = raw_key_str.encode('utf-8')
方法2:字面量解析(代码更简洁)
用Python标准库的ast.literal_eval,可以安全解析Python字面量字符串,直接还原为原bytes对象,不需要手动处理字符串切片:
import ast cookie_key = "b'BNdXABgpo_Y5PH3VNpSfAJo8Y7A-vdTTIN5WJxYRgpk='" original_key = ast.literal_eval(cookie_key)
最佳实践建议
后续存储Fernet密钥到Cookie时,不要直接存bytes对象的字符串表示,提前解码为纯字符串存储更省事:
# 存储时处理 key = Fernet.generate_key() cookie_value = key.decode('utf-8') # 直接存这个值到Cookie # 读取时直接转码即可 original_key = cookie_value.encode('utf-8')
内容的提问来源于stack exchange,提问作者Utkarsh Tyagi
相关产品推荐
相关产品推荐

