2017-06-02 2 views
0

J'ai ce code en C#convertir C# TRIPLEDES Code PKCS7 au code php

var dataBytes = Encoding.UTF8.GetBytes('clear text'); 

var symmetric = SymmetricAlgorithm.Create("TripleDes"); 
symmetric.Mode = CipherMode.ECB; 
symmetric.Padding = PaddingMode.PKCS7; 

var encryptor = symmetric.CreateEncryptor(Convert.FromBase64String('myKey'), new byte[8]); 

var signedData = Convert.ToBase64String(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length)); 

maintenant je besoin de convertir le code C# pour code php. égard

+0

Il est préférable de ne pas utiliser 3DES, il est vétuste et pas très sûr, utiliser à la place AES. N'utilisez pas le mode ECB, il n'est pas sécurisé, voir [Mode ECB] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29), faites défiler vers le bas jusqu'au Penguin. Au lieu d'utiliser le mode CBC avec un IV aléatoire, il suffit de préfixer les données cryptées avec l'IV pour l'utiliser dans le décryptage, il n'a pas besoin d'être secret. – zaph

Répondre

-1

J'utilise cette fonction et a fonctionné pour moi

function encryptData($plainText,$key) 
{ 

    $byte = mb_convert_encoding($key, 'ASCII'); 

    $desKey = base64_decode($key); 
    $data = mb_convert_encoding($plainText, 'ASCII'); 

    // add PKCS#7 padding 
    $blocksize = mcrypt_get_block_size('tripledes', 'ecb'); 
    $paddingSize = $blocksize - (strlen($data) % $blocksize); 
    $data .= str_repeat(chr($paddingSize), $paddingSize); 

    // encrypt password 
    $encData = mcrypt_encrypt('tripledes', $desKey, $data, 'ecb'); 

    return base64_encode($encData); 
} 
+0

Il n'y a aucune raison de croire que '$ key' ou' $ plainText' peuvent être convertis en 'ASCII'. Un meilleur encodage serait 'utf8'. – zaph