Silverlight&x2B;PHP-AES密码

Silverlight&x2B;PHP-AES密码,php,silverlight,cryptography,aes,Php,Silverlight,Cryptography,Aes,Silverlight和PHP之间的加密协议存在问题 我尝试在Silverlight中加密文本值,并在PHP中借助AES算法对其进行解密。 下面是我如何在Silverlight中对其进行加密的示例: <!-- language: lang-cs --> SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Crypt file (CRP)|*.crp"; bool res = dlg.ShowDialog().Value

Silverlight和PHP之间的加密协议存在问题

我尝试在Silverlight中加密文本值,并在PHP中借助AES算法对其进行解密。 下面是我如何在Silverlight中对其进行加密的示例:

<!-- language: lang-cs -->
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Crypt file  (CRP)|*.crp";

bool res = dlg.ShowDialog().Value;

if (res == true)
{
    Stream outStream = dlg.OpenFile();

    AesManaged cryptAlg = new AesManaged();
    ICryptoTransform encryptor = cryptAlg.CreateEncryptor(_encryptKey, _encryptIv);
    CryptoStream cryptStream = new CryptoStream(outStream, encryptor, CryptoStreamMode.Write);

    byte[] buffer = Encoding.UTF8.GetBytes(textBox1.Text);
    int size = buffer.Length;
    cryptStream.Write(buffer, 0, size);
    cryptStream.Close();
    outStream.Close();
}

SaveFileDialog dlg=新建SaveFileDialog();
dlg.Filter=“Crypt file(CRP)|*.CRP”;
bool res=dlg.ShowDialog().Value;
如果(res==true)
{
Stream outStream=dlg.OpenFile();
AESMANDED cryptAlg=新AESMANDED();
ICryptoTransform encryptor=cryptAlg.CreateEncryptor(_encryptKey,_encryptIv);
CryptoStream CryptoStream=新加密流(扩展流、加密器、CryptoStreamMode.Write);
byte[]buffer=Encoding.UTF8.GetBytes(textBox1.Text);
int size=buffer.Length;
cryptStream.Write(缓冲区,0,大小);
cryptStream.Close();
exptream.Close();
}
下面是我如何在PHP中解密它的示例:

<!-- language: lang-php -->
function fb_get_contents($filename) {
    $fp = fopen($filename, "rb");
    $cc = fgets($fp);
    fclose($fp);
    return $cc;
}

$value = fb_get_contents($_FILES['file']['tmp_name']);

$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);

$key = substr($key, 0, 16);
$iv = $key;
$rc = mcrypt_generic_init($module, $key, $iv); 

$value = base64_decode($value);
$value = mdecrypt_generic($module, $value); 

//apply pkcs7 padding removal
$packing = ord($value[strlen($value) - 1]);
if($packing && $packing < $blockSize){
    for($P = strlen($value) - 1; $P >= strlen($value) - $packing; $P--){
        if(ord($value{$P}) != $packing){
            $packing = 0;
        }//end if
    }//end for
}//end if 

$value = substr($value, 0, strlen($value) - $packing);

函数fb_get_contents($filename){
$fp=fopen($filename,“rb”);
$cc=fgets($fp);
fclose($fp);
返回$cc;
}
$value=fb_get_contents($_FILES['file']['tmp_name']);
$module=mcrypt_module_open(mcrypt_RIJNDAEL_128',mcrypt_MODE_CBC',);
$blockSize=mcrypt_get_block_size(mcrypt_RIJNDAEL_128,mcrypt_MODE_CBC);
$key=substr($key,0,16);
$iv=$key;
$rc=mcrypt\u generic\u init($module,$key,$iv);
$value=base64_解码($value);
$value=mdecrypt_generic($module,$value);
//应用pkcs7衬垫拆卸
$packing=ord($value[strlen($value)-1]);
如果($packing&&$packing<$blockSize){
对于($P=strlen($value)-1;$P>=strlen($value)-$packing;$P--){
如果(ord($value{$P})!=$packing){
$packing=0;
}//如果结束
}//结束
}//如果结束
$value=substr($value,0,strlen($value)-$packing);
但它不起作用。我认为这可能是AES算法的填充参数的问题。谢谢。

如果没有c#代码的其余部分以及你所说的“它不工作”的意思,我不能确定,但我想这是你的问题

$iv=$key

你想从隐秘的静脉中取出静脉注射


此外,我认为AES的默认编码不是PKCS7,2)有时需要调用缓冲区上的flush来写入最后一个块

“它不工作”是什么意思?这意味着解密后的文本值不等于输入的文本值。请用您的IV和密钥演示更完整的示例。试着把它们设置成一些无意义的东西,比如[0,0,0,0..]。我怀疑您对它们的字节表示有问题。