Python 3.7.9:如何去除首尾引号并转换为bytes类型
解决PEM公钥加载错误:找不到起始标记的问题
问题根源
你拿到的是被字符串化的bytes对象——原始公钥的bytes被转换成了字符串存储,导致内容里包含多余的b'开头、'结尾以及转义符,直接转bytes会把这些冗余内容一并带入,所以加载时找不到标准的PEM起始标记。
解决方案步骤
- 清理字符串:去掉外层双引号、
b'前缀和'后缀,同时还原转义的换行符。 - 转换为bytes:将清理后的纯PEM字符串编码为bytes。
- 加载公钥:用对应加密库加载处理后的bytes。
代码示例
假设你的原始输入字符串是:
raw_input = "\"b'-----BEGIN RSA PUBLIC KEY-----\nMBgCEQCZ0e8OKi/eLXMXxPrhdFc3AgMBAAE=\n-----END RSA PUBLIC KEY-----\n'\""
1. 清理字符串
优先用精准切片方式:
# 先去掉前后的双引号 temp = raw_input.strip('"') # 去掉开头的b'和结尾的'(含末尾多余换行) clean_pem_str = temp[2:-1].rstrip('\n')
如果遇到格式略有差异的字符串化bytes,用通用替换方式:
clean_pem_str = raw_input.replace('"b\'', '').replace('\'\n"', '').replace('\\n', '\n')
2. 转bytes并加载公钥
用cryptography库的示例:
from cryptography.hazmat.primitives import serialization key_bytes = clean_pem_str.encode('utf-8') public_key = serialization.load_pem_public_key(key_bytes)
用rsa库的示例:
import rsa key_bytes = clean_pem_str.encode('utf-8') public_key = rsa.PublicKey.load_pkcs1(key_bytes, format='PEM')
为什么之前的方法没用?
- 直接用
b''转换:会把带b'的整个字符串转成bytes,此时PEM标记变成了b'-----BEGIN RSA PUBLIC KEY-----'(带b'前缀),不符合标准格式。 - 单纯
strip():只能去掉首尾空白或指定字符,无法处理中间的转义符、特定前缀后缀。
内容的提问来源于stack exchange,提问作者ȶɦɛֆɦɨռʏɛռɖ
相关产品推荐
相关产品推荐

