我想从数据库中读取一个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
错误一直存在。为什么会这样?如何修复它?
我试着让它工作,但还没有运气。
1条答案
按热度按时间b4qexyjb1#
您的代码存在两个问题:
\n
变为\\n
;1.我们将字符串作为二进制字符串输入来处理,其中转义符没有转换为实际的换行符。
要直接在代码中修复此问题,可以在
load_pkcs1
语句之前插入以下行:这将修复编码并取消对换行符的转义。
不确定PEM是否以及为什么存储为二进制字符串; PEM结构的全部意义在于它是文本而不是二进制。