[英]PHP AES-128-CBC decryption removing XML tags
我正在嘗試處理以加密數據形式接收的API XML響應。 我用這個功能解密
function aes128_cbc_decrypt($key, $data, $iv) {
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
$padding = ord($data[strlen($data) - 1]);
return substr($data, 0, -$padding);
}
結果是:
888 123671891 123 2018-12-11 123671892 1234 2018-12-11
但是結果應該是這樣的
<Codes>
<ServiceProviderId>888</ServiceProviderId>
<Voucher>
<PIN>123671891</PIN>
<Serial>123</Serial>
<Validity>2018-12-31</Validity>
</Voucher>
<Voucher>
<PIN>123671892</PIN>
<Serial>1234</Serial>
<Validity>2018-01-23</Validity>
</Voucher>
</Codes>
我試圖將其轉換為xml:
$oXML = new SimpleXMLElement($data);//data is the plain text before the tags
但是我得到:
Warning: SimpleXMLElement::__construct(): Entity: line 13: parser error : expected '>'
Warning: SimpleXMLElement::__construct(): Entity: line 13: parser error : Opening and ending tag mismatch: Code line 1 and M
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML'
Stack trace: #0 : SimpleXMLElement->__construct('<Codes...') #1 {main}
因此,如何像上面提到的示例一樣,通過編輯函數來查看標簽,甚至轉換為以空格分隔的純文本數據到xml標簽?
[更新]
服務提供者使用此命令行來解密和提取XML代碼
openssl enc -d -aes-128-cbc -K 2c6a3537532e2d55336f40562e3f3728 -iv 00000000000000000000000000000000 -nopad -in vouchers.aes -out vouchers.xml
我得到這個警告
Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize
這是問題嗎?
[UPDATE2]
新的加密數據
ï—®B}Õ]µåú‚2 |mE!ˆNÃìUí7“WãóZÍ? mnÂ`׃«âQÅö÷õuh8ïBÈÏõ:SÔ+Ä«¬Y¦¯9U¦Ó AûûÒœïŽ tsx Ñèµ4ÍC„÷ËÄùy¼Mú‹ø‘Ú‘Êÿ*‘䜣燌?5͹¯B¾éó|•VÖ¨-pÃñ6p‚Ï>Ü1Ž%Ò‰WœÌ~¶Î¬í#¸)i²ºøq+ÊÏ'šþ!_5ˆ¨I®ßØSe°„¶Þp~´~ÀLíQ@ wbN6'è‘Ô5Ë”õI©Üp¨b¦ùãmÁ~C•Wí>äúÕA@ƒjãDÎÐË]Çt<-Ù³{!ú®SÅÄ#…"üJíûEÒœJ·¶žÒ\y@I»€5ˆ§p=”%åÔa›%Ïgͤâ2u[>µ½–ƒRÈ
結果應該是
<Codes>
<ServiceProviderId>666</ServiceProviderId>
<Voucher>
<PIN>123456789000001</PIN>
<Serial>1234567890001</Serial>
<Validity>2013-12-11</Validity>
</Voucher>
<Voucher>
<PIN>123456789000002</PIN>
<Serial>1234567890002</Serial>
<Validity>2013-12-11</Validity>
</Voucher>
</Codes>
但是當我回顯解密函數時,我得到:
666 123456789000001 1234567890001 2013-12-11 123456789000002 1234567890002 2013-12-11
當我嘗試使用“ SimpleXMLElement”時,我得到了上面的警告。
正如我們在評論部分聊天時所發現的那樣,問題在於刪除了一些字節,這些字節被誤解為填充。 通過刪除這些字節,無法通過new SimpleXMLElement($data)
解析結果字符串。
通過刪除與填充相關的代碼,僅通過mcrypt_decrypt
進行簡單的解密,一切就可以了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.