Ho il seguente codice C# che genera chiavi:Differenza tra .NET e PHP crittografia
public static byte[] Encrypt(byte[] plainData, string salt)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(salt);
DES.IV = ASCIIEncoding.ASCII.GetBytes(salt);
ICryptoTransform desencrypt = DES.CreateEncryptor();
byte[] encryptedData = desencrypt.TransformFinalBlock(plainData, 0, plainData.Length);
return encryptedData;
}
private string GetEncryptedKey(string key)
{
return BitConverter.ToString(KeyGeneratorForm.Encrypt(ASCIIEncoding.ASCII.GetBytes(key), "abcdefgh")).Replace("-", "");
}
sto cercando di eseguire la stessa cosa in PHP:
function get_encrypted_key($key){
$salt = "abcdefgh";
return bin2hex(mcrypt_encrypt(MCRYPT_DES, $salt, $key, MCRYPT_MODE_CBC, $salt));
}
Tuttavia, non v'è una piccola discrepanza nei risultati, come gli ultimi 16 caratteri sono sempre diverse:
With key "Benjamin Franklin":
C# : 0B3C6E5DF5D747FB3C50DE952FECE3999768F35B890BC391
PHP: 0B3C6E5DF5D747FB3C50DE952FECE3993A881F9AF348C64D
With key "President Franklin D Roosevelt":
C# : C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB32A86FABCEA5711E1
PHP: C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB37ACBE60BB1D21F3F
ho anche provato a eseguire l'imbottitura t ransformare alla mia chiave utilizzando il seguente codice:
function get_encrypted_key($key){
$salt = "abcdefgh";
$extra = 8 - (strlen($key) % 8);
if($extra > 0) {
for($i = 0; $i < $extra; $i++) {
$key.= "\0";
}
}
return bin2hex(mcrypt_encrypt(MCRYPT_DES, $salt, $key, MCRYPT_MODE_CBC, $salt));
}
Ma mi ritrovo con gli stessi risultati come senza padding.
Se avete qualche idea su cosa sta succedendo, sarei felice di sentirne parlare! :)
Grazie
Forse a causa di diversi schemi di imbottitura? – mensi
Se con lo snippet "classico" di riempimento, intendi quello menzionato in alto nelle note su 'mcrypt_encrypt', che mi dà i tuoi risultati' C# 'da PHP. Nota che lo snippet usa ECB, non CBC, quindi devi modificarlo. –
Grazie per i vostri commenti ragazzi. Ho dettagliato il codice che ho usato per il padding. Guarderò il link di John. – karlipoppins