C#/.NET和PHP之间的三重加密

C#/.NET和PHP之间的三重加密,c#,php,.net,3des,tripledes,C#,Php,.net,3des,Tripledes,为了与C#/.NET应用程序通信,我必须在PHP应用程序中实现一些三重加密,但与服务器端C#/.NET应用程序相比,我得到的结果不同。我已经尝试过使用不同的编码和标志,但没有多大成功 我已经能够从C#/.NET解密字符串,并在PHP中获得所需的结果(基于StackOverflow和其他网站上的示例) 服务器端C#/.NET代码可在此处找到并执行: “cient”端PHP代码可在此处找到并执行: 我花了几个小时来解决这个问题,但还没能解决 如果有人能发现问题或给我指出正确的方向,我将不胜感

为了与C#/.NET应用程序通信,我必须在PHP应用程序中实现一些三重加密,但与服务器端C#/.NET应用程序相比,我得到的结果不同。我已经尝试过使用不同的编码和标志,但没有多大成功

我已经能够从C#/.NET解密字符串,并在PHP中获得所需的结果(基于StackOverflow和其他网站上的示例)

服务器端C#/.NET代码可在此处找到并执行:

“cient”端PHP代码可在此处找到并执行:


我花了几个小时来解决这个问题,但还没能解决


如果有人能发现问题或给我指出正确的方向,我将不胜感激。

PHP代码使用
hash_pbkdf2
sha1
算法

TripleDES是对称加密,它与sha1非常不同,sha1是一个散列函数


您可以参考PHP中的三元组,我使用iconv()而不是mb_convert_encoding()解决了这个问题,现在我在PHP和.NET/C中都得到了预期的结果。下面的代码显示了我的结果以供参考

<?php

$decrypted = 'SourceString123';
$encrypted = 'Vql0pOr7ouxfUScI3H8exeFbfmcfE5uM3TBtAZXAq0zwkJmqEe13EA==';

$password = 'fsgerh';
$salt = 'Dataehaeh';

$hash = hash_pbkdf2("sha1", $password, mb_convert_encoding($salt, 'UTF-16LE'), 1000, 32, true); 

$key = substr($hash, 0, 24);
$iv = substr($hash, 24, 8);

echo base64_encode($key) . "<br />";
echo base64_encode($iv) . "<br /><br />";

$result = iconv('UTF-16', 'UTF-8', openssl_decrypt($encrypted, 'des-ede3-cbc', $key, 0, $iv));
echo $result;
echo "<br /><br />";

$result = openssl_encrypt(iconv('UTF-8', 'UTF-16', $decrypted), 'des-ede3-cbc', $key, 0, $iv);
echo $result;
echo "<br />";

?>


请输入一些代码,以便我们能够帮助您。我必须使用哈希函数检索必要的IV和密钥。在.NET示例中使用了相同的方法(请参见下文)<代码>$hash=hash_pbkdf2(“sha1”,“password,$mb_convert_编码($salt,'UTF-16LE')),1000,32,true)DeriveBytes rgb=新的Rfc2898DeriveBytes(密码,Encoding.Unicode.GetBytes(salt));我尝试了几个例子,但没有得到同样的结果。我可以用PHP加密和解密,但base64编码的字符串是不同的。
<?php

$decrypted = 'SourceString123';
$encrypted = 'Vql0pOr7ouxfUScI3H8exeFbfmcfE5uM3TBtAZXAq0zwkJmqEe13EA==';

$password = 'fsgerh';
$salt = 'Dataehaeh';

$hash = hash_pbkdf2("sha1", $password, mb_convert_encoding($salt, 'UTF-16LE'), 1000, 32, true); 

$key = substr($hash, 0, 24);
$iv = substr($hash, 24, 8);

echo base64_encode($key) . "<br />";
echo base64_encode($iv) . "<br /><br />";

$result = mb_convert_encoding(openssl_decrypt($encrypted, 'des-ede3-cbc', $key, 0, $iv), 'UTF-8', 'UTF-16');
echo $result;
echo "<br /><br />";

$result = openssl_encrypt(mb_convert_encoding($decrypted, 'UTF-8'), 'des-ede3-cbc', $key, 0, $iv);
echo $result;
echo "<br /><br />";

$result = openssl_encrypt(mb_convert_encoding($decrypted, 'UTF-16'), 'des-ede3-cbc', $key, 0, $iv);
echo $result;
echo "<br /><br />";

?>
<?php

$decrypted = 'SourceString123';
$encrypted = 'Vql0pOr7ouxfUScI3H8exeFbfmcfE5uM3TBtAZXAq0zwkJmqEe13EA==';

$password = 'fsgerh';
$salt = 'Dataehaeh';

$hash = hash_pbkdf2("sha1", $password, mb_convert_encoding($salt, 'UTF-16LE'), 1000, 32, true); 

$key = substr($hash, 0, 24);
$iv = substr($hash, 24, 8);

echo base64_encode($key) . "<br />";
echo base64_encode($iv) . "<br /><br />";

$result = iconv('UTF-16', 'UTF-8', openssl_decrypt($encrypted, 'des-ede3-cbc', $key, 0, $iv));
echo $result;
echo "<br /><br />";

$result = openssl_encrypt(iconv('UTF-8', 'UTF-16', $decrypted), 'des-ede3-cbc', $key, 0, $iv);
echo $result;
echo "<br />";

?>