什么';是什么导致了这个无效签名异常?(公钥和签名由PHP创建,验证用Python完成)
我基本上是在尝试使用“openssl”(PHP)创建一个签名,并使用“Scriptografy”(PYTHON)进行验证。我总是会收到“无效签名”的错误,这意味着我做错了什么。我知道它们是不同的语言和库,但一旦我对它们使用相同的算法,我希望得到一个有效的签名。谢谢你的帮助 PHP:创建公钥和签名没有问题 -----开始公钥----- MIICIJANBGKQHKIG9W0BAQEFAOCAG8AMICCGKCAGEATXYDJ9VQTGKR/ITYZ6+e xXATzalUOdBcqee+qcb5NJ6Z5DgNdYi9lWz/4YfitYKp0EFwPzbem1zBzKbuQSko Y7ZRJPMYGBW8Q6WEXO4SYA44JXS75JNXMA2X22DKNKAJRE5KXNGBIF1IXCxVVC kfyewM8C8y2iAy5j02YZYw9ysrQWJegamq6sidnMCJBtokOnPQaNJwbDQTqwrSRS 8IDY7BTHB7F/bBwLArwxG7aLFjJ9vf2F7HpmZ3VvJa69OhY0pZMSqePQpJBIQ+2 Ztiywpkkoukjz22brqoe0ygmqvrcyoj2mz8csikjl6wm9erfxvbh/XqPWjX1t nWdnF6qSD/2itIw18+PZCWYAOUE6W064DCBRUQ4UOYXP69IFTRV5OHASUWPJ27Q 2 UCZ9DWWPHLWHZ+LI4RAB6WHD2R8SB7VEHVSZ4KD5KIHEL9DT8MJ+jGyhTjqIhP 7amgcOQLKZJfmeltYI+F0u8OJCOPHXTLXFB1MIXPDHVCDR93LJGU6NBOTWCPX HNOI86XKBLJMNXMXUQBUFPRU8VAUIZKVRPQS8Z2K58MLXA9+hykjMcqpAvQ6STM vLswdj0j9aqyv6I94z2Q2Lgcuoh7xSJcLhKN9QGaarUqjAY/ZZPIDNCxLNVRAV BMYQZ9PQBSAHSD7PVVPUW8MCAWEAQ== -----结束公钥----- 2.目前,我正在做一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,一个研究,2,2,2,2,2,2,2,2,2,2,一个关于一个研究一个关于一个研究一个关于一个关于一个关于一个研究,一个研究,一个研究,一个研究,一个关于一个研究,一个研究,一个PA0BBSVCW9目前,他们的研究已经是一个非常简单的概念。一个BQ(BBQ)是一个BQ(BQ)是一个关于GQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQCDJVBJL0= PYTHON:InvalidSignature错误什么';是什么导致了这个无效签名异常?(公钥和签名由PHP创建,验证用Python完成),php,python,openssl,rsa,public-key,Php,Python,Openssl,Rsa,Public Key,我基本上是在尝试使用“openssl”(PHP)创建一个签名,并使用“Scriptografy”(PYTHON)进行验证。我总是会收到“无效签名”的错误,这意味着我做错了什么。我知道它们是不同的语言和库,但一旦我对它们使用相同的算法,我希望得到一个有效的签名。谢谢你的帮助 PHP:创建公钥和签名没有问题 -----开始公钥----- MIICIJANBGKQHKIG9W0BAQEFAOCAG8AMICCGKCAGEATXYDJ9VQTGKR/ITYZ6+e xXATzalUOdBcqee+qcb
很明显,您的PHP代码:
ciphertext = alicePubKey.verify(
decoded,
b'oi',
padding.PKCS1v15(),
hashes.SHA1()
)
PSS和SHA-256是更好的选择,因此您应该研究修改PHP代码以使用它们,而不是修改python代码。正如James所说,函数
openssl\u sign
默认使用SHA1,使用参数openssl\u algou\u SHA256
可以解决什么问题
所以我做了这些改变:
PHP
python
$data = 'oi';
$pkeyid = openssl_pkey_get_private($privKey);
openssl_sign($data, $signature, $pkeyid);
error_log(base64_encode($signature));
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.serialization import load_pem_private_key
from cryptography.hazmat.primitives.serialization import load_pem_public_key
signature= 'MoUZzfaHCwME2mmxJnMBQWgo+lTLK2QfpfD+5IEnSwi0wmRtgZgFl7IGsWYlTO+zTQCcB/aKg91CMClmb5P2jEtOkY3ie2pNflEIsc3aGqfWoVpHJUMoft+4hytzgMszqwgbJdo6eac7zIxlrzmeb4jb58APtc4aaLLQru2Gga9oPRyCqbXrD0TXnQ6GzjDNGwi6wP30NU9KaHWaGfeq1WSqsAIaIbi2oG4MeWJYX6SOB/CX1Jg8SJYzWQahpJeybE4Z8fR6ncuvfbjp9aet1aKsPB/DFPQ5VFaAS4oItVb0Ha4wkQ8YgJu5fEUK7X9KzuOwidja5RLZtwDPa0bBSveCw9D8FUsguilaoIu7ueDPTRueK4bQkYstOc2OvVlzInukyOzFXVgZsiV23FTHrQ5FqHd9nCUbfuhgrMqHRYQmRFUgDaeyY+B5ve3bQ4lT3qm282ngKi8AZ+clB0VeaFiQxpF8SCCRMu0bX3dsQMaXRUeSVDipf3ZMABl9xXbzEjqXoJzuvC6tCnEv8K3HzKbjz2S1876eGy7opIixaUMwDu9QOiPoSiFUY/xCsX8D1Im8Mv4eyzWNV3FL1U/GS3LZzkq/NuJdB7wjCib3ieHaYX/bvTpmAp/oO0+vbI2pzq9w71cpqQpsNsOZSGkgY2q1sO6u0I5jCFScdJVbJl0='
decoded = base64.b64decode(signature)
plaintextMessage="oi"
# /tmp/public contains the public key
alicePubKey = load_pem_public_key(open('/tmp/public', 'rb').read(),default_backend())
ciphertext = alicePubKey.verify(
decoded,
plaintextMessage,
padding.PSS(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH,
),
hashes.SHA256()
)
ciphertext = alicePubKey.verify(
decoded,
b'oi',
padding.PKCS1v15(),
hashes.SHA1()
)
openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_SHA256);
ciphertext = alicePubKey.verify(
decoded,
plaintextMessage,
padding.PKCS1v15(),
hashes.SHA256()
)