Crypt_AES phpseclib相当于没有IV的C#

问题描述 投票:0回答:1

我需要将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和encrypt方法。

c# encryption aes phpseclib
1个回答
1
投票

phpseclib默认使用CBC模式。该模式需要IV。正如其他一些注释所指出的那样,当您不使用时,您使用的phpseclib版本使用所有空字节的IV。

$crypt->setKey($password); 

变量名称是$password的事实确实让我想知道在你的C#实现中是否使用了某种PBKDF。很难说,因为你没有发布你的C#代码。

我已经收到“填充无效,无法删除”。我尝试解密加密字符串时出错

phpseclib默认使用PKCS8填充。即。如果明文是块长度的倍数,它将附加16x 0x16字节。如果它是块长度的倍数的两个字节,它将附加2x 0x02字节。

也许你的C#实现使用了不同类型的填充。如果是这样,您可以通过先执行$crypt->disablePadding();禁用PKCS8填充,然后在执行加密之前应用自己的自定义填充来实现自己的填充。

© www.soinside.com 2019 - 2024. All rights reserved.