2011-05-23 52 views
1

Silverlight和PHP之間的密碼協議問題。Silverlight + PHP - AES crypt

我試圖加密Silverlight中的文本值,並使用AES算法在PHP中解密。 這個例子我如何在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(); 
} 

這個例子我如何解密在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); 

而且這是行不通的。我認爲這可能是AES算法的填充參數的問題。謝謝。

+0

你是什麼意思「它不工作」? – 2011-05-25 07:32:52

+0

這意味着解密後的文本值不等於輸入文本值。 – user470214 2011-05-25 07:56:15

+0

請使用您的IV和密鑰來顯示更完整的示例。 嘗試將它們設置爲一些無意義的[0,0,0,0 ..]。我懷疑你的字節表示有問題。 – wizzard0 2011-05-25 15:28:35

回答

0

如果缺少其他的C#代碼,以及「你的工作不正常」的含義,我不能確定,但​​我會說這是你的問題。

$ iv = $ key;

你想拉IV形式cryptAlg.IV

而且,我不覺得默認的編碼是PKCS7爲AesManaged和2)有時需要調用flush在緩衝區得到最後的書面塊。