我需要将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方法。
答案 0 :(得分:1)
phpseclib默认使用CBC模式。该模式需要IV。正如其他一些注释所指出的那样,当不存在任何空字节时,您使用的phpseclib版本将使用所有空字节的IV。
Arrays.stream(longIds).forEach(System.out::println);
变量名称为$crypt->setKey($password);
的事实确实使我想知道您的C#实现中是否使用了某种PBKDF。很难说,因为您没有发布C#代码。
我已经收到“填充无效,无法删除”。尝试解密加密的字符串时出错
phpseclib默认使用PKCS8填充。即。如果明文是块长度的倍数,它将附加16x 0x16字节。如果它比块长度的倍数少两个字节,则会附加2x 0x02字节。
也许您的C#实现使用的是其他类型的填充。如果是这样,您可以先执行$password
来禁用PKCS8填充,然后再执行加密之前应用自己的自定义填充,以实现自己的功能。