用OpenSSL和Python3签名数据-签名的数据无法验证

2024-09-28 05:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试复制以下步骤,在python3脚本中使用OpenSSL对一些数据进行签名。当我从命令行执行操作时,一切正常。当我把它放到脚本中时,签名的数据不会被识别/验证。在

如何将签名数据转换为可识别的格式?下面我尝试删除'b'(表示字节)和单引号,以迫使某些东西通过,但没有运气。在

从命令行执行以下操作时,这些步骤工作正常:

命令行:

  1. 创建数据文件

    echo -n "This is my data." > data.txt

  2. 签署数据文件

    openssl dgst -sha256 -sign key.pem -keyform PEM -out signature数据.txt

  3. 对数据文件进行编码

    openssl enc -base64 -in signature > sig_base64

*输出:

nTxLMxUTOf5suMOqy9vCHserJ3jzaKPRxGABR1zz3sZsuQHvBD8r9z82wzmvkS7u
ygW4fi6NH9P5znJFaTw3omnZjOL+xWrxvwmK0Lg25a/MNC5xpuY8i12rIsLLZHbu
B4q0G7dj4m3oJNxyhoZjrKPr3V0KssdxuNBlMYdjd3tuhj5MI1cqpRetAcw2nJps
ovC14sPAzTaKHUmMoN+H5t2rVgoeaHhTknhEAlW5FqXMcm/cR/rRru9EoAEe7cmV
rTRiJpCBiKrpHBNPmQJOmF+zrS3tID4XGFV/yUgcU0chlLMoJyv1AdfHdQYzfeGP
EYFuk7NYnjz5kVLoasTS7Q==

我的剧本

^{pr2}$

我的脚本输出

-----BEGIN DATA REQUEST-----
This is my data.
-----END DATA REQUEST-----


Example 1
-----BEGIN SIGNATURE-----
b'sooabk4NIJwPtTdQvqIpiHxGpc10log56IdSaE9gnwPToYhlIOZBUo5W1Peyfz6lnQojYcG+MGLGtYQNIsHsYJnT6p5cBN3QHf/FIU4SaELTLpmLhEtW3n5a19vbEXi/LBXaUfrCNf1A7TaNh+uM+iMIeNDsgF4GWfJwb+O1jlw1NdUk4hces7CHBYGvk9/sGwntyHYkkOnJpPhy6ZQ2bhVnYS/R2d9Wilptjl7OlDkAb4VB2TXjPPtSzWxMQ+Ch4HF8BdnOGzUo+Yb9lKsP8LnyROMEtEBBaTmh/6xVKwaRi1xqorJS+qWRtivqIN4RPsKz+jlcqg6fCZxi6NW2Qw=='
-----END SIGNATURE-----


Example 2
-----BEGIN SIGNATURE-----
sooabk4NIJwPtTdQvqIpiHxGpc10log56IdSaE9gnwPToYhlIOZBUo5W1Peyfz6lnQojYcG+MGLGtYQNIsHsYJnT6p5cBN3QHf/FIU4SaELTLpmLhEtW3n5a19vbEXi/LBXaUfrCNf1A7TaNh+uM+iMIeNDsgF4GWfJwb+O1jlw1NdUk4hces7CHBYGvk9/sGwntyHYkkOnJpPhy6ZQ2bhVnYS/R2d9Wilptjl7OlDkAb4VB2TXjPPtSzWxMQ+Ch4HF8BdnOGzUo+Yb9lKsP8LnyROMEtEBBaTmh/6xVKwaRi1xqorJS+qWRtivqIN4RPsKz+jlcqg6fCZxi6NW2Qw==
-----END SIGNATURE-----


Example 3
-----BEGIN SIGNATURE-----
sooabk4NIJwPtTdQvqIpiHxGpc10log56IdSaE9gnwPToYhlIOZBUo5W1Peyfz6lnQojYcG+MGLGtYQNIsHsYJnT6p5cBN3QHf/FIU4SaELTLpmLhEtW3n5a19vbEXi/LBXaUfrCNf1A7TaNh+uM+iMIeNDsgF4GWfJwb+O1jlw1NdUk4hces7CHBYGvk9/sGwntyHYkkOnJpPhy6ZQ2bhVnYS/R2d9Wilptjl7OlDkAb4VB2TXjPPtSzWxMQ+Ch4HF8BdnOGzUo+Yb9lKsP8LnyROMEtEBBaTmh/6xVKwaRi1xqorJS+qWRtivqIN4RPsKz+jlcqg6fCZxi6NW2Qw==
-----END SIGNATURE-----

从命令行输出与示例2和示例3相比,我在脚本输出中看到的唯一区别是命令行中签名数据的格式与脚本生成的数据格式不同(cli是一个块,而我的代码只生成一行)。在

我卡住了。搞不清是怎么回事。有什么想法吗?在


Tags: 数据命令行脚本dataexample数据文件umend
1条回答
网友
1楼 · 发布于 2024-09-28 05:24:39

我使用OpenSSL库再次尝试了这一点,并且示例3的输出正常工作(我没有尝试其他输出):

脚本

#!/usr/local/bin/python3
import OpenSSL
from OpenSSL import crypto
import base64


key_file = open("key.pem", "rb")
key = key_file.read()
key_file.close()

pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, key)

data = "This is my data."
dataBytes = bytes(data, encoding='ascii')

signData = OpenSSL.crypto.sign(pkey, dataBytes, "sha256")

encodedData = base64.b64encode(signData)

print("  -BEGIN DATA REQUEST  -")
print(data)
print("  -END DATA REQUEST  -")
print("\n")
print("Example 1")
print("  -BEGIN SIGNATURE  -")
print(encodedData)
print("  -END SIGNATURE  -")
print("\n")
print("Example 2")
print("  -BEGIN SIGNATURE  -")
print (encodedData.decode('ascii'))
print("  -END SIGNATURE  -")
print("\n")
print("Example 3")
print("  -BEGIN SIGNATURE  -")
print(str(encodedData).replace("b'","").replace("'",""))
print("  -END SIGNATURE  -")

输出

^{pr2}$

相关问题 更多 >

    热门问题