如何正确读取python RSA Pem密钥?

gojuced7  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(720)

我想从数据库中读取一个RSA公钥。我使用的是RSA Python库。公钥以文本形式存储。
当我打印密钥类型和它的值时,我得到(变量名为pk)(print(type(pk), pk)):

<class 'bytes'> b'-----BEGIN RSA PUBLIC KEY-----\\nMIIBCgKCAQEAmXSSnzrY2/z7zLZuF7KZZFP7mbmYEeRhpQsQfpEv4t/Fvz6/g5QO\\n79ZcGBd6wOxshGFSLYPAl1oB3GPNkwr+mdjqtSIXzhhvW9Xjjx4dIUVn7JrtsBXi\\nr7aG85HEYyk3LLBoWus9X+XJ/tiHlQzqY2o8+dO31X4HBeWzflczrNXN3ntGGf4S\\noAaqJKlkUSxdGexvJUhmli9x+CKQoojFHxHfq1IZldRMPb8O8N6RSZIA5t2n6vpw\\nGPx8tBm7Eub5nVi+sACHS6rLdAHcd+D4tBCjp9wp2dGu77/oRUI7aomRFRMmBf7/\\nZkHHzor2kGIZ3fYHEL7g+WkVsxqGXblG8QIDAQAB\\n-----END RSA PUBLIC KEY-----\\n'

但是当我用

pubkey = rsa.PublicKey.load_pkcs1(pk)

我得到

File "/usr/local/lib/python3.11/site-packages/rsa/pem.py", line 77, in _pem_lines raise ValueError('No PEM start marker "%r" found' % pem_start) ValueError: No PEM start marker "b'-----BEGIN RSA PUBLIC KEY-----'" found

错误一直存在。为什么会这样?如何修复它?
我试着让它工作,但还没有运气。

b4qexyjb

b4qexyjb1#

您的代码存在两个问题:

  1. PEM似乎编码错误,或者在编码/解码过程中被更改。因此,在上述二进制字符串中,换行符从\n变为\\n;
    1.我们将字符串作为二进制字符串输入来处理,其中转义符没有转换为实际的换行符。
    要直接在代码中修复此问题,可以在load_pkcs1语句之前插入以下行:
pk = pk.replace(b'\\n', b'\n').decode('ascii')

这将修复编码并取消对换行符的转义。
不确定PEM是否以及为什么存储为二进制字符串; PEM结构的全部意义在于它是文本而不是二进制。

相关问题