gpt4 book ai didi

单元测试失败后只读Python文件

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:28 26 4
gpt4 key购买 nike

我正在尝试创建一个单元测试来测试以下功能:

    def decrypt_keys(self, enc_password):
with open ('id_rsa','r') as privkeyfile:
pem_key = privkeyfile.read()
print(pem_key)
priv = rsa.PrivateKey.load_pkcs1(pem_key)
return rsa.decrypt(base64.b64decode(bytes(enc_password, 'utf-8')),priv).decode('utf-8')

但是,单元测试失败并出现以下错误:

ValueError: No PEM start marker "b'-----BEGIN RSA PRIVATE KEY-----'" found

----------------------------------------------------------------------
Ran 1 test in 0.012s

FAILED (errors=1)
b'-----BEGIN RSA PRIVATE KEY-----
... rest of private key here ...
-----END RSA PRIVATE KEY-----'

紧接着,正如所见,文件的内容按照库的预期被打印出来。如何确保在函数尝试将文件加载为 rsa key 之前完整读取文件?

最佳答案

您的文件中似乎包含 Python 二进制字符串引号,这破坏了 RSA 读取代码,因为它不知道如何解释您的私有(private)代码周围的 b'...'键。

我建议在文本编辑器中打开私钥文件并删除这些标记。您可能还想调查文件的写入位置,如果它是您代码的其他部分,则修复它。您可能在 bytes 对象上调用 str,而您应该调用 decode 方法(例如 binary_key_text.decode() )。或者,您可以在编写文件时以二进制模式 ('wb') 打开文件,然后直接写入 bytes 对象。

您也许可以在阅读 Python 代码时解决此问题(使用类似 pem_key = pem_key[2:-1] 的代码,删除前两个字符和最后一个字符)。但是,如果您将它添加到您的代码中,那么它将适用于错误写入的文件,而不适用于正常文件。这就是 bug 是如何被铭记在软件中的,以至于它们在未来无法修复! (我想您可以使用if pem_key.startswith("b'") 和 pem_key.endswith("'") 保护切片操作,但我只会打扰如果错误的文件编写代码已被广泛发布并且您确实需要保证向后兼容性。)

关于单元测试失败后只读Python文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com