1 回答
TA贡献1963条经验 获得超6个赞
也许发布公钥和一些有效的测试数据以便我们可以测试自己?
无论如何,v_~�@&�W��q�&Ș�uQ���֔�
这可能是一个有效的签名,请记住 SHA256 是 256 个随机位,它是二进制数据,不是 ASCII 数据,不是十六进制,并且不可打印。SHA256 也恰好是 32 个字节长(256 位,1 个字节是 8 位,256/8 是 32 个字节),因此如果您在解密后运行 var_dump(strlen($data)) ,它应该打印 32,如果是的话不打印 32,这意味着他们正在使用填充方案,尝试检查 OPENSSL_PKCS1_PADDING 和 OPENSSL_NO_PADDING 的 strlen ,当您获得正确的填充方案时,解密后的 strlen($data) 应该是 int(32)
但我最好的猜测是:
$signature = 'GcTtinhU0YgwGbZPtBwLdh+zdEe0w0W95TFPggeHMCjeDUBWgZfCZ6ZDRUk7DfT5BkKsbAi8/4o60Krcwz1JMdRjmsPf7vj33heVIB2PZJaf8eFR1jijLIsyl4vgH7BbbQ2I6kk6IcYXYWPVAHYRWxl1pJwOyNxZPr49fdW+hcw2zbpkEmj2114QBSiV6eHLowVYKLvpuiT8zLc6DN/wVzCYBuR/cg+CPHgYMeWFsuvu9J46hm6Hij00E68ldYAqVwImlmHPqfqvdEItg3Oi0ac4tXH2nCNgLPHcyU/H32NzTYC9iT1YZkoInqsU6Qv64vbU9lSMS91EQBEa5UQkUg==';
$canonical = 'c328e942-8be8-4104-abbe-048254f893dc|9687|2874.30|52409|BP1381|550bd8439cd1f41691671cdd4e8c6ae6';
$pubKey = openssl_pkey_get_public('file://path/to/public.pem');
if( openssl_public_decrypt(base64_decode($signature), $data, $pubKey)){
echo "signature decryption success! ";
if(hash_equals(hash("sha256",$canonical,true),$data)){
echo "checksum verification success!";
} else{
echo "checksum verification failed (after decryption was successful..)";
}
}else{
echo 'checksum decryption error';
}
但再次尝试两者
if( openssl_public_decrypt(base64_decode($signature), $data, $pubKey, OPENSSL_PKCS1_PADDING)){
和
if( openssl_public_decrypt(base64_decode($signature), $data, $pubKey, OPENSSL_NO_PADDING)){
其中 1 个可能是正确的(当正确时, var_dump(strlen($data)) 应该打印 int(32) )
- 1 回答
- 0 关注
- 157 浏览
添加回答
举报