You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.7.9:如何去除首尾引号并转换为bytes类型

解决PEM公钥加载错误:找不到起始标记的问题

问题根源

你拿到的是被字符串化的bytes对象——原始公钥的bytes被转换成了字符串存储,导致内容里包含多余的b'开头、'结尾以及转义符,直接转bytes会把这些冗余内容一并带入,所以加载时找不到标准的PEM起始标记。

解决方案步骤

  1. 清理字符串:去掉外层双引号、b'前缀和'后缀,同时还原转义的换行符。
  2. 转换为bytes:将清理后的纯PEM字符串编码为bytes。
  3. 加载公钥:用对应加密库加载处理后的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,提问作者ȶɦɛֆɦɨռʏɛռɖ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:20:31