问题描述
我获得了一个证书 Test.pem
,其中包含 p12
公钥的证书。
这是用于创建和导出密钥/证书的命令(我没有运行它们)
$ keytool -genkeypair -alias senderKeyPair -keyalg RSA -keysize 2048 -dname "CN=Test" -validity 365 -storetype PKCS12 -keystore sender_keystore.p12 -storepass changeit
$ keytool -exportcert -alias senderKeyPair -storetype PKCS12 \
-keystore sender_keystore.p12 -file \
sender_certificate.cer -rfc -storepass changeit
所以我然后
-
使用证书文件
Test.pem
导出运行的公钥:openssl x509 -pubkey -noout -in Test.pem > public_key.pem
-
然后我解码了最初看起来像这样的 base64 签名:
UmuM2m2gWBQVzNzMhd9trppSuUupgbn8WuHj1HDSwGe + Es037QEJHcFm08x6jz4USwvDoAP2fML0papsyUCKdGT + KI / Oeo75irYZYSjNlRlBNSMRy4WqERYUIQcfhyagzDcRuEKcIGGm6RoLu1Tqe3h + OL + Z / 8lgVZKwG5dwxwlzFQqgDRwWx8cFTA2qgvcEAur1sRLS7OqnSWH + 3osh30QsBOSzWxmiPskNIww + 4DoUgUIed2i55ImpujQrqHDH8J4Xc4JyrkBO + eHB254l2kkVcrOEyveMoPlIYL3 / vZHc7nw7HcNY2I2zknGFykXCqQDk2CvgoiDDpAJ / AF57UQ ==
使用以下命令:
openssl enc -base64 -d -in signed_message.sha256.base64 -out signed_message.sha256
-
鉴于我已将初始消息(即 WCtNjKEW)保存到文件中,我尝试使用以下命令验证签名:
openssl dgst -sha256 -verify public_key.pem -signature signed_message.sha256 initial_message.txt
我得到的是 Verification Failure
此外,我尝试使用 python 和 pyCrypto 模块使其自动化,但结果相同。
from Crypto.PublicKey import RSA
from base64 import b64decode,b64encode
from hashlib import sha256
from Crypto.Hash import SHA256
from Crypto.Signature import PKCS1_PSS,PKCS1_v1_5
signedTID = "UmuM2m2gWBQVzNzMhd9trppSuUupgbn8WuHj1HDSwGe+Es037QEJHcFm08x6jz4USwvDoAP2fML0papsyUCKdGT+kI/Oeo75irYZYSjNlRlBNSMRy4WqERYUIQcfhyagzDcRuEKcIGGm6RoLu1Tqe3h+oL+Z/8lgVZKwG5dwxwlzFQqgDRwWx8cFTA2qgvcEAur1sRLS7OqnSWH+3osh30QsBOSzWxmiPskNIww+4DoUgUIed2i55ImpujQrqHDH8J4Xc4JyrkBO+eHB254l2kkVcrOEyveMoPlIYL3/vZHc7nw7HcNY2I2zknGFykXCqQDk2CvgoiDDpAJ/AF57UQ=="
TID = b'WCtNjKEW'
pubkey = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgLhgbMUDS9BPOTG01z34
ygukIzDeEqzON80IpnlfZuFsbgA3T0O5yEmokdD3s3jxFZAHgRPb45QsSw2ggeb2
oTwzSGSjsdoYFNGYUyVuj6FWlCFAe9/xrHPx2svU4G/+1NWjoQhbee4c/HwNn0id
FYsHbOtfcibkBGZPtWeFp6S7q3EMoWlkc5a1bERjefkh+5irGrkZyLErc4bZYlaT
...
-----END PUBLIC KEY-----"""
# Read the public key
key = RSA.importKey(pubkey)
# Read test message
message = TID
# Create SHA1 hash object
h = SHA.new(message)
# Create PKCS1 handler
cipher = PKCS1_PSS.new(key)
# Read the signature
signature = signedTID
# Verify signature
print(cipher.verify(h,signature))
我错过了什么?
编辑
现在在 python 中似乎可以通过将脚本更改为以下内容来工作。
public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgLhgbMUDS9BPOTG01z34ygukIzDeEqzON80IpnlfZuFsbgA3T0O5yEmokdD3s3jxFZAHgRPb45QsSw2ggeb2oTwzSGSjsdoYFNGYUyVuj6FWlCFAe9/xrHPx2svU4G/....'
sigature = 'UmuM2m2gWBQVzNzMhd9trppSuUupgbn8WuHj1HDSwGe+Es037QEJHcFm08x6jz4USwvDoAP2fML0papsyUCKdGT+kI/Oeo75irYZYSjNlRlBNSMRy4WqERYUIQcfhyagzDcRuEKcIGGm6RoLu1Tqe3h+oL+Z/8lgVZKwG5dwxwlzFQqgDRwWx8cFTA2qgvcEAur1sRLS7OqnSWH+3osh30QsBOSzWxmiPskNIww+4DoUgUIed2i55ImpujQrqHDH8J4Xc4JyrkBO+eHB254l2kkVcrOEyveMoPlIYL3/vZHc7nw7HcNY2I2zknGFykXCqQDk2CvgoiDDpAJ/AF57UQ=='
origin_data = 'WCtNjKEW'
key_bytes = bytes(public_key)
key_bytes = b64decode(key_bytes)
key = RSA.importKey(key_bytes)
hash_value = SHA256.new(bytes(origin_data))
verifier = PKCS1_v1_5.new(key)
print(verifier.verify(hash_value,b64decode(signature)))
但是为什么我不能使用 openssl 命令重现它似乎很奇怪。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)