【发布时间】:2022-01-13 21:19:12
【问题描述】:
react native library for biometrics 生成一个 base 64 签名,我想使用存储在数据库中的公钥 RSA 2048 作为纯文本(也由库生成)来验证该签名,以使用正确的公钥验证用户。 在 Topaco 的评论之后,我注意到公钥和签名作为单行字符串从库中返回,没有填充。
$publicKeyResource = openssl_pkey_get_public(("-----BEGIN PUBLIC KEY-----\n".$publicKey."\n-----END PUBLIC KEY-----"));
$verify = openssl_verify($message, base64_decode($signature), $publicKeyResource, "sha256withRSAEncryption" );
$verify 总是返回 0
格式化后的公钥示例:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyEQAmIthd0J7TdWGLt1X
Q3TdGhzoXVMiiENy9HDqlQKPImEwy4PEzJUr9JEZsWE4LarxsgkKnVZgiE+cNxSV
cE+zVBNaeb2hKxejrRVBpe9xgXb2agjrG7twuTKyBe+SeEIB1LRfwVHcKw7jSLle
ih4xhMHtZ6Q/crgzkBLH/EZ47stTv80EcFvreM7S+bfVfajE7qiuNHvPNaRtLEVh
iC4PTUqSfnuEb1xv3uC7mnIRNLTxfgbwUmzjjfnUlr+jxcWyb35JVCtgb3nsV/2H
G0TCSyNJ5X0tPfIDy7EfDjc9Mj9n+thPgTKCtbMXwPCQu7jLqI4AAubstJv3p3Uc
NQIDAQAB
-----END PUBLIC KEY-----
消息的签名示例:“auth”
mglZm2RKmkBIR+cNkuOJwAjnJJUAoyUl4w5NnzJsAFxuyvRhlJ3RS1Jksvzn90lp6lRG8aBy0nbxyCR2CpOjCH3G4XuUThTpJ862CPp5OMI9t9Ne6+/w2YiLj0Raq6WAiNDqxzg1PKRzojLvVpZd9P1URpevkoG6cQnk+FzITtESDmGaPtIgMV9ON2rrtF7Occ1PblFjSwCfkm3To3R4QdBgiVSdLIjoJvdff2RzId2dlGZxxiKyLs5JK6oFppmls/TcfMVvffj/fBFW9HjIggpHz8KmJTSb1crepK9WxrkKMvMs2Qsbd5nzf/SwiXDfFaBMKXJ30/2e3TqQ3CFXiQ==
我找到了一个关于同一个库的similiar question,但他们的解决方案与我使用的相同,但对我不起作用。
【问题讨论】:
-
请检查数据。密钥和签名似乎不匹配(假定为 PKCS#1 v1.5 填充)。
-
@Topaco 我尝试使用 openssl_pkey_get_public 进行公钥填充,但仍然得到相同的结果(代码已更新)
-
数据似乎不一致。同样在 Java 下,无法使用您发布的密钥验证签名(使用 react native libarary 的参数)。
-
我还检查并得出了与 Topaco 相同的结论:假设 PKCS#1 v1.5,似乎没有使用与您发布的公钥配套的私钥进行签名。跨度>
标签: php react-native cryptography rsa