Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中解密用C#中的3DES加密的字符串?_C#_Php_Encryption - Fatal编程技术网

如何在PHP中解密用C#中的3DES加密的字符串?

如何在PHP中解密用C#中的3DES加密的字符串?,c#,php,encryption,C#,Php,Encryption,我正在使用下面的代码对我的C#程序中的字符串进行解码,但我还需要能够使用PHP对相同的字符串服务器端进行解密。PHP中是否有以下c#代码的等价物 要在PHP中获取MD5哈希,请使用。第二个参数提供原始输出,而不是十六进制编码 要使用三重DES加密/解密,可以使用模块。以最简单的形式: $ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_CBC); 考虑事项: 三重DES使用192位密钥,但您有128位密钥。PH

我正在使用下面的代码对我的C#程序中的字符串进行解码,但我还需要能够使用PHP对相同的字符串服务器端进行解密。PHP中是否有以下c#代码的等价物


要在PHP中获取MD5哈希,请使用。第二个参数提供原始输出,而不是十六进制编码

要使用三重DES加密/解密,可以使用模块。以最简单的形式:

$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_CBC);
考虑事项:

  • 三重DES使用192位密钥,但您有128位密钥。PHP用null填充键,但是.NET不允许这样的键。相反,它将前8个字节追加到末尾
  • .NET使用PCKS7填充,PHP使用零填充
为了避免这些不兼容,您必须对标准代码进行一些修改。这是从一个:

函数encryptNET3DES($key、$vector、$text){
$td=mcrypt_模块_打开(mcrypt_3DES',mcrypt_模式_CBC',);
//完成钥匙
$key_add=24-斯特伦($key);
$key.=substr($key,0,$key\u add);
//填充文本
$text_add=strlen($text)%8;

对于($i=$text\u add;$i我想将
.net
中的代码解密为
php
。 我的
.net
加密和解密方法如下:

public class EncryptDecrypt
{
    private byte[] TDES_Key = { 0x01, 0x04, 0x01, 0x01, 0x01, 0x09, 0x07, 0x08, 0x01, 0x09, 0x07, 0x08, 0x01, 0x01, 0x02, 0x04 };
    private byte[] tdesIV;
    public string Encrypt(string textToEncrypt,string KeyVI)
    {
        tdesIV = GetLegalKey(KeyVI);
        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
        tdes.Key = TDES_Key;
        tdes.IV = tdesIV;
        byte[] buffer = Encoding.ASCII.GetBytes(textToEncrypt); 
        return Convert.ToBase64String(tdes.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length));/// 
    }   

查看
mcrypt
模块()。以防有人需要它。
function encryptNET3DES($key, $vector, $text){
    $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

    // Complete the key
    $key_add = 24 - strlen($key);
    $key .= substr($key, 0, $key_add);

    // Padding the text
    $text_add = strlen($text)%8;
    for ($i=$text_add; $i<8; $i++){
        $text .= chr(8-$text_add);
    }

    mcrypt_generic_init($td, $key, $vector);
    $encrypt64 = mcrypt_generic($td, $text);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

     // Return the encrypt text in 64 bits code
    return $encrypt64;
}
public class EncryptDecrypt
{
    private byte[] TDES_Key = { 0x01, 0x04, 0x01, 0x01, 0x01, 0x09, 0x07, 0x08, 0x01, 0x09, 0x07, 0x08, 0x01, 0x01, 0x02, 0x04 };
    private byte[] tdesIV;
    public string Encrypt(string textToEncrypt,string KeyVI)
    {
        tdesIV = GetLegalKey(KeyVI);
        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
        tdes.Key = TDES_Key;
        tdes.IV = tdesIV;
        byte[] buffer = Encoding.ASCII.GetBytes(textToEncrypt); 
        return Convert.ToBase64String(tdes.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length));/// 
    }