CONVERT C # -TRYPTION IN PYTHON PYDES
-
29-10-2019 - |
Frage
Ich habe Probleme beim Konvertieren von Code von C # nach Python.Drüben unter Martijns C # -Blog ist ein ausgezeichnetes Programm zum Verschlüsseln / Entschlüsseln [siehe unten]Ich kann es nicht direkt in die Python-Version pyDes konvertieren [Beispiel unten]
public static string DecryptString(string Message, string Passphrase)
{
byte[] Results;
System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
// Step 1. We hash the passphrase using MD5
// We use the MD5 hash generator as the result is a 128 bit byte array
// which is a valid length for the TripleDES encoder we use below
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));
// Step 2. Create a new TripleDESCryptoServiceProvider object
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
// Step 3. Setup the decoder
TDESAlgorithm.Key = TDESKey;
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
// Step 4. Convert the input string to a byte[]
byte[] DataToDecrypt = Convert.FromBase64String(Message);
// Step 5. Attempt to decrypt the string
try
{
ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
}
finally
{
// Clear the TripleDes and Hashprovider services of any sensitive information
TDESAlgorithm.Clear();
HashProvider.Clear();
}
// Step 6. Return the decrypted string in UTF8 format
return UTF8.GetString( Results );
}
PyDES:
from pyDes import *
data = "Please encrypt my data"
k = des("DESCRYPT", ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)
d = k.encrypt(data)
print "Encrypted: %r" % d
print "Decrypted: %r" % k.decrypt(d)
assert k.decrypt(d, padmode=PAD_PKCS5) == dat
Ich habe die ursprünglichen pyDes so geändert, dass EZB anstelle von CBC verwendet wird. Keine der Saiten passt zusammen und ich bin am Ende meines Seils. Bitte helfen Sie! Danke
Lösung
Egal --- habe es herausgefunden.
Wenn Sie diese Zeile in pyDes ändern
print "Encrypted: %r" % d
bis
print "Encrypted: %r" % d.encode('base64')
dann stimmt der Code genau überein.
Führen Sie zum Vergleichen den Originalcode von Martijns Site aus: [Ausgabe]
Message: This world is round, not flat, don't believe them! Password: secret Encrypted string: pafHnI124lxzCr+93COqxfgOTan8x9oPzX4R/PDYkBnrjufk0/7mesG5tmS2AU Pxna3z0jY+7II= Decrypted string: This world is round, not flat, don't believe them!
Und hier ist der geänderte Code von pyDes - Sie müssen das Passwort mit md5Hash auffüllen
import md5 from pyDes import * Msg = "This world is round, not flat, don't believe them!" Password = "secret" m=md5.new() m.update(Password) k = triple_des(m.digest() , ECB,padmode=PAD_PKCS5) d = k.encrypt(Msg) print "Encrypted: %r" % d.encode('base64') print "Decrypted: %r" % k.decrypt(d) assert k.decrypt(d, padmode=PAD_PKCS5) == Msg
mit der Ausgabe:
Encrypted: 'pafHnI124lxzCr+93COqxfgOTan8x9oPzX4R/PDYkBnrjufk0/7mesG5tmS2AUPxna3z 0jY+7II=\n' Decrypted: "This world is round, not flat, don't believe them!"
Ich hoffe das hilft der nächsten Person !!!! Vielen Dank -D