gpt4 book ai didi

python - Python 和 Ruby 之间的匹配签名

转载 作者:行者123 更新时间:2023-12-01 01:04:19 25 4
gpt4 key购买 nike

我几天来一直在尝试验证用 python 中的私钥签名的一些消息。请注意,该消息已使用 Ruby 进行签名。

当我在 python 中签署同一条消息时,我可以验证它没有问题。请注意,我已经验证了哈希值是相同的。

Python 代码:

string_to_encrypt = b"aaaaabbbbbaaaaabbbbbaaaaabbbbbCC"
sha1 = SHA.new()
sha1.update(string_to_encrypt)

# load private key
pkey = OpenSSL.crypto.load_privatekey(OpenSSL.crypto.FILETYPE_PEM, open('./license.pem', 'rb').read())
sign_ssl = OpenSSL.crypto.sign(pkey, sha1.digest(), 'RSA-SHA1')
b64_ssl = base64.b64encode(sign_ssl)

ruby :

string_to_encrypt = "aaaaabbbbbaaaaabbbbbaaaaabbbbbCC"

sha1 = Digest::SHA1.digest(string_to_encrypt)

#sign it
private_key_file = File.join(File.dirname(__FILE__), 'license.pem')
rsa = OpenSSL::PKey::RSA.new(File.read(private_key_file))

signed_key = rsa.private_encrypt(sha1)

#update the license string with it
x = Base64.strict_encode64(signed_key)

我希望 b64_ssl 和 x 包含相同的值,但它们没有。有人可以向我解释一下我在那里缺少什么吗?

最佳答案

这些代码片段实际上都没有生成正确的签名。

在 Ruby OpenSSL 库中,您希望使用 sign 方法,而不是 private_encrypt 方法,这是一种低级操作,不会执行所需的所有操作产生有效的签名。

在这两个库中,sign 操作都会为您执行哈希处理,您无需事先执行此操作。事实上,您的 Python 代码实际上对数据进行了两次哈希处理。

尝试以下 Python 代码:

import OpenSSL
import base64

string_to_encrypt = b"aaaaabbbbbaaaaabbbbbaaaaabbbbbCC"

# load private key
pkey = OpenSSL.crypto.load_privatekey(OpenSSL.crypto.FILETYPE_PEM, open('./license.pem', 'rb').read())
sign_ssl = OpenSSL.crypto.sign(pkey, string_to_encrypt, 'SHA1')

b64_ssl = base64.b64encode(sign_ssl)

print(b64_ssl.decode())

它产生与此 Ruby 代码相同的输出:

require 'openssl'
require 'base64'

string_to_encrypt = "aaaaabbbbbaaaaabbbbbaaaaabbbbbCC"

#sign it
private_key_file = File.join(File.dirname(__FILE__), 'license.pem')
rsa = OpenSSL::PKey::RSA.new(File.read(private_key_file))

signed_key = rsa.sign('sha1', string_to_encrypt)

#update the license string with it
x = Base64.strict_encode64(signed_key)

puts x

关于python - Python 和 Ruby 之间的匹配签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55523440/

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