1 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
也許發(fā)布公鑰和一些有效的測(cè)試數(shù)據(jù)以便我們可以測(cè)試自己?
無論如何,v_~?@&?W??q?&??uQ?????
這可能是一個(gè)有效的簽名,請(qǐng)記住 SHA256 是 256 個(gè)隨機(jī)位,它是二進(jìn)制數(shù)據(jù),不是 ASCII 數(shù)據(jù),不是十六進(jìn)制,并且不可打印。SHA256 也恰好是 32 個(gè)字節(jié)長(zhǎng)(256 位,1 個(gè)字節(jié)是 8 位,256/8 是 32 個(gè)字節(jié)),因此如果您在解密后運(yùn)行 var_dump(strlen($data)) ,它應(yīng)該打印 32,如果是的話不打印 32,這意味著他們正在使用填充方案,嘗試檢查 OPENSSL_PKCS1_PADDING 和 OPENSSL_NO_PADDING 的 strlen ,當(dāng)您獲得正確的填充方案時(shí),解密后的 strlen($data) 應(yīng)該是 int(32)
但我最好的猜測(cè)是:
$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 個(gè)可能是正確的(當(dāng)正確時(shí), var_dump(strlen($data)) 應(yīng)該打印 int(32) )
- 1 回答
- 0 關(guān)注
- 234 瀏覽
添加回答
舉報(bào)