第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用 openssl_public_decrypt 解密簽名

使用 openssl_public_decrypt 解密簽名

PHP
開心每一天1111 2023-10-22 21:27:42
我正在嘗試驗(yàn)證對(duì)我們的一個(gè)端點(diǎn)的外部調(diào)用,該端點(diǎn)是由第三方觸發(fā)的,我們收到交易數(shù)據(jù)和基于該交易信息的簽名,因此,我們需要解密簽名并比較結(jié)果驗(yàn)證真?zhèn)?。我正在嘗試openssl_public_decrypt使用提供商的公鑰來解密簽名。這就是我正在嘗試的方式:$signature = 'GcTtinhU0YgwGbZPtBwLdh+zdEe0w0W95TFPggeHMCjeDUBWgZfCZ6ZDRUk7DfT5BkKsbAi8/4o60Krcwz1JMdRjmsPf7vj33heVIB2PZJaf8eFR1jijLIsyl4vgH7BbbQ2I6kk6IcYXYWPVAHYRWxl1pJwOyNxZPr49fdW+hcw2zbpkEmj2114QBSiV6eHLowVYKLvpuiT8zLc6DN/wVzCYBuR/cg+CPHgYMeWFsuvu9J46hm6Hij00E68ldYAqVwImlmHPqfqvdEItg3Oi0ac4tXH2nCNgLPHcyU/H32NzTYC9iT1YZkoInqsU6Qv64vbU9lSMS91EQBEa5UQkUg==';$pubKey = openssl_pkey_get_public('file://path/to/public.pem');if( openssl_public_decrypt(base64_decode($signature), $data, $pubKey)){  echo $data;}else{  echo 'Error';}我沒有收到任何錯(cuò)誤,但該$data值不是我所期望的,是這樣的v_~?@&?W? ?q?&??uQ?????我確信我丟失了一些東西,但我無法找出它是什么,因?yàn)樵?data值看起來像是加密的。我期望解密的結(jié)果是167619085f7ed94026e357930b18dc011971f226c898ef7551cdf6ec9ad694cf以下代碼的結(jié)果$canonical = 'c328e942-8be8-4104-abbe-048254f893dc|9687|2874.30|52409|BP1381|550bd8439cd1f41691671cdd4e8c6ae6';$hashed = hash('sha256', $canonical);最后一部分是提供者如何生成簽名。對(duì)于給定的示例,規(guī)范形式如下: cec4b9bf-5a39-4bd7-bc8b826ebc18208d|Internal_0005|12|39679|BP7610|947d589a40dece13c28f2b63c41ae451我們通過使用 SHA-256 對(duì)規(guī)范形式進(jìn)行哈希處理并使用我們的私鑰對(duì)結(jié)果字節(jié)進(jìn)行加密來對(duì)響應(yīng)進(jìn)行簽名。RSA_ENCRYPT(SHA256(canonicForm), privkey.key)要驗(yàn)證有效負(fù)載,您必須重新計(jì)算規(guī)范形式并對(duì)結(jié)果應(yīng)用 SHA-256。結(jié)果值必須與用我們的公鑰解密簽名參數(shù)的結(jié)果進(jìn)行比較。任何提示將不勝感激。
查看完整描述

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) )


查看完整回答
反對(duì) 回復(fù) 2023-10-22
  • 1 回答
  • 0 關(guān)注
  • 234 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)