2011-05-23 7 views
1

Problème avec le protocole de cryptographie entre Silverlight et PHP.Silverlight + PHP - AES crypt

J'ai essayé de crypter la valeur du texte dans Silverlight et de la décrypter en PHP à l'aide de l'algorithme AES. Cet exemple comment je chiffrez dans 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(); 
} 

Cet exemple comment je le déchiffrez en 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); 

Et ça ne fonctionne pas. Je pense que cela pourrait être un problème avec le paramètre de remplissage de l'algorithme AES. Merci.

+0

Que voulez-vous dire par "ça ne marche pas"? –

+0

Cela signifie que la valeur du texte après décryptage n'est pas égale à la valeur du texte saisi. – user470214

+0

S'il vous plaît montrer plus complet exemple, avec votre IV et clés. Essayez de les définir à un non-sens comme [0,0,0,0 ..]. Je suppose que vous avez des problèmes avec les représentations d'octets d'entre eux. – wizzard0

Répondre

0

En l'absence du reste du code C# et de ce que vous entendez par "ça ne marche pas", je ne peux pas en être sûr, mais je dirais que c'est votre problème.

$ iv = $ key;

Vous voulez tirer le formulaire iv cryptAlg.IV

De plus, je ne pense pas que l'encodage par défaut est PKCS7 pour AesManaged et 2), vous devez parfois appeler flush sur le tampon pour obtenir le dernier bloc écrit .