如何在Python中将PEM格式EC私钥转换为代码友好的二进制表示
解决方案
不需要对openssl命令行做封装调用,使用cryptography库即可原生实现该需求,步骤如下:
- 先安装依赖库
pip install cryptography
- 完整实现代码
from cryptography.hazmat.primitives import serialization from cryptography.hazmat.backends import default_backend def pem_ec_privkey_to_code_format(pem_file_path, password: bytes = None): # 读取PEM格式私钥文件 with open(pem_file_path, "rb") as f: pem_content = f.read() # 反序列化加载私钥对象 ec_privkey = serialization.load_pem_private_key( pem_content, password=password, backend=default_backend() ) # 提取原始私钥值,转换为对应长度的大端字节 privkey_raw_bytes = ec_privkey.private_numbers().private_value.to_bytes( length=ec_privkey.curve.key_size // 8, byteorder="big" ) # 格式化为0xXX逗号分隔的代码友好格式 return ", ".join([f"0x{byte_val:02X}" for byte_val in privkey_raw_bytes]) # 调用示例 if __name__ == "__main__": # 无密码私钥直接调用 output = pem_ec_privkey_to_code_format("ec_private.pem") print(output) # 有密码的私钥调用示例:pem_ec_privkey_to_code_format("ec_private.pem", password=b"your_password")
效果说明
针对你提供的openssl输出示例,运行上述代码会直接输出符合要求的格式:0x7A, 0xF6, 0x73, 0x2F, 0x58, 0x1D, 0x00, 0x5A, 0xFC, 0xF2, 0x16, 0xF6, 0x38, 0x5F, 0xF6, 0x37, 0x10, 0x29, 0x24, 0x2C, 0xC6, 0x08, 0x40, 0xDD, 0x7D, 0x2A, 0x7A, 0x55, 0x03, 0xB7, 0xD2, 0x1C
注意事项
- 支持所有标准EC曲线(P-256、P-384、secp256k1等),会自动匹配私钥长度生成对应输出
- 若PEM私钥为加密状态,调用函数时传入bytes类型的密码参数即可
内容的提问来源于stack exchange,提问作者Fratink
相关产品推荐
相关产品推荐

