簡體   English   中英

沒有IV的Crypt_AES phpseclib等效C#

[英]Crypt_AES phpseclib equivalent C# without IV

我需要將xml服務集成到我們的應用程序中,並且Web服務正在使用phpseclib AES加密和解密。 因此,我需要了解phpseclib的流程。 我們正在.NET C#環境中工作,我們無法分析該php代碼。 請找到實現示例的php代碼,並建議我如何將其轉換為C#。

set_include_path('vendor/pear'); 
require_once '/Crypt/AES.php';
require_once '/SOAP/Client.php'; 

$password = 'ewad3x45efc542b3897e23esgy4s6xnm';
$data = '  
<WorkRequest version="3.0"> 
 <work>WORK NOW!</work>
</WorkRequest> '; 

$crypt = new Crypt_AES();      
$crypt->setKey($password);  
$data = gzencode($data);
$data = $crypt->encrypt($data);

如您所見,沒有IV或類似的東西。 示例代碼中僅使用setKey和crypto方法。

phpseclib默認使用CBC模式。 該模式需要IV。 正如其他一些注釋所指出的那樣,當不存在任何NULL字節時,所使用的phpseclib版本將使用所有空字節的IV。

$crypt->setKey($password); 

變量名稱為$password的事實確實使我想知道您的C#實現中是否使用了某種PBKDF。 很難說,因為您沒有發布C#代碼。

我已經收到“填充無效,無法刪除”。 嘗試解密加密的字符串時出現錯誤

phpseclib默認使用PKCS8填充。 即。 如果明文是塊長度的倍數,它將附加16x 0x16字節。 如果它比塊長度的倍數少兩個字節,它將附加2x 0x02字節。

也許您的C#實現使用的是其他類型的填充。 如果是這樣,您可以通過執行$crypt->disablePadding();首先禁用PKCS8填充,從而實現自己的功能$crypt->disablePadding(); 然后在執行加密之前應用您自己的自定義填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM