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 關注
- 220 瀏覽
添加回答
舉報