C# 在PHP中,要在mcrypt_uudecrypt()函数中添加哪些参数

C# 在PHP中,要在mcrypt_uudecrypt()函数中添加哪些参数,c#,php,encryption,C#,Php,Encryption,我有以下C#代码,但我在为PHP添加参数时遇到了困难 mcrypt_uu;decrypt() 字符串mcrypt_解密(字符串$cipher、字符串$key、字符串$data、, 字符串$mode[,字符串$iv]) 我的数据是-:“iHcKDE0aeDZU3q31ULZcvQ==” 键-:“&%#@?,:*” 我想使用PHP mcrypt_decrypt()函数对这些数据进行解密。我的C语言知识很少,但PHP很好。请帮帮我 <?php $key = pack("nvc*",0x12, 0

我有以下C#代码,但我在为PHP添加参数时遇到了困难 mcrypt_uu;decrypt()

字符串mcrypt_解密(字符串$cipher、字符串$key、字符串$data、, 字符串$mode[,字符串$iv])

我的数据是-:“iHcKDE0aeDZU3q31ULZcvQ==”

键-:“&%#@?,:*”

我想使用PHP mcrypt_decrypt()函数对这些数据进行解密。我的C语言知识很少,但PHP很好。请帮帮我

<?php
$key = pack("nvc*",0x12, 0x34, 0x56, 120, 0x90, 0xab, 0xcd, 0xef);
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB)
$ciphertext_dec = base64_decode("iHcKDE0aeDZU3q31ULZcvQ==");
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
$retval = mcrypt_decrypt(MCRYPT_3DES, $key, $ciphertext_dec, MCRYPT_MODE_CFB, $iv_dec);
echo $retval;
?>

从外观上看,您需要创建一个
iv
,而不是在
$key
上运行
substr
substr
具有
mcrypt\u get\u key\u size(密码,模式)
的密钥,这似乎是您使用
iv
所做的

$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
而且
iv
应该来自随机源,而不是
$key
的削减。但是,
iv
是可选的。这是我能看到的唯一问题

这是旧的,但在我写它的时候它对我来说很好


更新

我已经更新了,以便于互动。您不再需要专门化
iv
Cipher::encrypt
将其设置并附加到加密数据
Cipher::decrypt
然后在解密加密数据之前提取它

IV只是为了给加密例程提供一个备用种子。这个IV根本不需要保密,尽管它是可取的。您甚至可以将其与密文一起发送,而不会失去安全性


你有什么错误吗?你能发布你在PHP中尝试过的,而不是C代码吗?echo mcrypt#u decrypt(mcrypt#u 3DES,$key,$ciphertext#dec,mcrypt#u MODE#CFB)我得到的输出是¼p#你有你的秘密
$key
,我在一个字符串上运行
sha256
,然后用
mcrypt#u get#u key
大小将其截断,然后,您的
iv
由随机源生成。例如,在
Cipher.php
中,运行
$encrypted=$Cipher->encrpyt(“我的数据”、“我的密钥”)$last_iv=$cipher->getIV()$解密=$cipher->decrypt($encrypted,$my secret key',$last_iv)字符串strText=Conversions.ToString(Interaction.IIf(Information.IsDBNull(RuntimeHelpers.GetObjectValue(当前[“ABC”]),“”,RuntimeHelpers.GetObjectValue(当前[“ABC”]));
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
<?php
function encrypt($data, $key = null, $iv = null) {
    $key = (strlen($key) == 0) ? $key = null : $key;

    $key_size = mcrypt_get_key_size(MCRYPT_3DES, MCRYPT_MODE_CFB); 
    $key = hash("sha256", $key, true); 
    $key = substr($this->key, 0, $key_size);

    if ($iv == null) {
        $iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB); 
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    }

    $out = mcrypt_encrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_CFB, $iv); 
    return base64_encode($out);
}

function decrypt($data, $key = null, $iv = null) {
    $key = (strlen($key) == 0) ? $key = null : $key;

    $key_size = mcrypt_get_key_size(MCRYPT_3DES, MCRYPT_MODE_CFB); 
    $key = hash("sha256", $key, true); 
    $key = substr($this->key, 0, $key_size);

    if ($iv == null) {
        $iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB); 
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    }

    $data = base64_decode($data); 
    $out = mcrypt_decrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_CFB, $iv);
}

$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$encrypted = encrypt('my data.', 'my secret key', $iv);
$decrypted = decrypt($encrypted, 'my secret key', $iv);

# $decrypted = 'my data.'
?>