ich eine Verschlüsselung Beispiel aus einer 3rd-Party, muß ich mit integrieren ...C# AES 128 CBC mit -nosalt unterschiedlichen Ergebnissen als openssl AES -128-cbc -nosalt Herstellung
Ich soll sie verschlüsselt senden Nachricht und sie entschlüsselt es an ihrem Ende und führt die erforderlichen Operationen durch.
Sie haben mir das Beispiel zur Verfügung gestellt, die ist, wie sie die Zeichenfolge erwarten verschlüsselt werden ..
echo -n [ ‚String verschlüsseln‘] | openssl enc -AES-128-cbc -A -a -nosalt -K [EncryptionKey in Hex] -IV 30303030303030303030303030303030
Die Sandbox encryptionKey Hex, die ich mit gegeben bin, ist 313233343536373839
Zur Zeit bin ich nicht in der Lage Verwenden Sie oben angegebenen Schlüssel und IV wie ... wie die AES-Implementierungen in .Net wirft mich und Fehler, der sagt 'Der angegebene Schlüssel ist keine gültige Größe für diesen Algorithmus'
dann habe ich nur den Schlüssel mit 0s aufgefüllt um 32 Bytes zu entsprechen und die IV abzuschneiden, um 16 Bytes zu entsprechen.
, dann bin ich in der Lage, den Code atleast aber die verschlüsselte Zeichenfolge von meinem C# Code ausführen konnte einfach nicht auf OpenSSL entschlüsselt erhalten ..
Unten ist mein Code ..
public static string EncryptString(string plainText, string password)
{
byte[] key, iv;
//converting key to hex
byte[] ba = Encoding.ASCII.GetBytes("abcdef");
string encryptionKeyHex = BitConverter.ToString(ba);
encryptionKeyHex = encryptionKeyHex.Replace("-", "");
// Padding key hex with zeros to match the size that .Net algo expects
if (encryptionKeyHex.Length < 32)
{
while (encryptionKeyHex.Length < 32)
{
encryptionKeyHex += "0";
}
}
var keyBytes = Encoding.ASCII.GetBytes(encryptionKeyHex);
var ivBytes = Encoding.ASCII.GetBytes("3030303030303030"); // truncated the original IV specified in the question description to match the size.
iv = ivBytes;
key = keyBytes;
var amAes = new AesManaged();
amAes.Mode = CipherMode.CBC;
amAes.Padding = PaddingMode.PKCS7;
amAes.KeySize = 128;
amAes.BlockSize = 128;
amAes.Key = key;
amAes.IV = iv;
var icTransformer = amAes.CreateEncryptor();
var msTemp = new MemoryStream();
var csEncrypt = new CryptoStream(msTemp, icTransformer, CryptoStreamMode.Write);
var sw = new StreamWriter(csEncrypt);
sw.Write(plainText);
sw.Close();
sw.Dispose();
csEncrypt.Clear();
csEncrypt.Dispose();
byte[] bResult = msTemp.ToArray();
//var sha = new SHA1CryptoServiceProvider();
//var result = sha.ComputeHash(bResult);
string sResult = Convert.ToBase64String(bResult);
sResult = HttpUtility.UrlEncode(sResult);
if (System.Diagnostics.Debugger.IsAttached)
{
string debugDetails = "";
debugDetails += "==> INPUT : " + plainText + Environment.NewLine;
debugDetails += "==> SECRET : " + password + Environment.NewLine;
//debugDetails += "==> SALT : " + Program.ByteArrayToHexString(salt) + Environment.NewLine;
debugDetails += "==> KEY : " + Encoding.ASCII.GetString(amAes.Key) + " (" + amAes.KeySize.ToString() + ")" + Environment.NewLine;
debugDetails += "==> IV : " + Encoding.ASCII.GetString(amAes.IV) + Environment.NewLine;
debugDetails += "==> ENCRYPTED : " + sResult;
Console.WriteLine(debugDetails);
}
return sResult;
}
OUTPUT:
==> INPUT: { "filter.accession_number.equals": "0987654321"}
==> SECRET: ==> KEY: 303132333435363738390000 00000000 (256)
==> IV: 3030303030303030
==> Verschlüsselt: B2uDRjnekFAlRDEKDldTs09lWiE4u16ZunVwDGi6gKm6YsaRlW4HU6eKJqfYZc7b
aktualisieren
Es bemerkt wurde, dass wir unterschiedliche Ergebnisse erhalten, wenn auf einem Windows-Verschlüsselung als auf einer Linux-Box, mit der gleichen Methode ..
Auf Linux-Box mit Openssl erhalten wir ..
Der Befehl: echo -n '{"filter.accession_number.equals": "0987654321"}' | openssl enc -AES-128-cbc -A -a -nosalt -K 313233343536373839 -IV 30303030303030303030303030303030
Das Ergebnis: MTAusb6rYkxYf9/REbFq9M1XwR + 6Q58FfSJPTxDNwgs6z3jZ8ru + 7ysnKuy2p3ox
Das verschlüsselte Zeichenfolge funktioniert gut .. ich bin in der Lage um es erfolgreich zu entschlüsseln.
Während der gleiche Befehl auf Windows-Box zu openssl gibt uns ..Der Befehl lautet: echo -n '{"filter.accession_number.equals": "0987654321"} openssl enc -AES-128-cbc -A -a -nosalt -K 313233343536373839 -IV 30303030303030303030303030303030
Das Ergebnis: Db9829q6QX6CPwLkE + rs6zqRJJQaGZ9xk7fbztaGqsKcHPcr7equz3yOJPLc + S6yvW4jXQTzoOk43F16GW7sPw ==
Dieser String funktioniert nicht ...
Ich frage mich, was der Wert von 'amAes.KeySize' ist nach dem Festlegen des Schlüssels. Ich frage mich, ob es auf 256 Bytes zurückgesetzt wird, nachdem Sie den Schlüssel gesetzt haben, obwohl Sie vorher direkt auf 128 gesetzt haben. Könnten Sie es ausdrucken und diese Informationen mit mir teilen? –
==> INPUT: { "filter.accession_number.equals": "0987654321" } ==> SECRET: ==> SCHLÜSSEL: 30313233343536373839000000000000 (256) ==> IV: 3030303030303030 ==> Encrypted: B2uDRjnekFAlRDEKDldTs09lWiE4u16ZunVwDGi6gKm6YsaRlW4HU6eKJqfYZc7b –
Die Beschreibung wurde mit Ausgabe aktualisiert ... weiter, tut mir leid, ich verstehe nicht, wohin du mich drückst, um den Schlüssel oder IV zu dekodieren? Ich meine, bei welchem Schritt? Ich denke, es erwartet die hexadezimale Zeichenfolge wie in der openssl-Anweisung, die ich in der Beschreibung erwähnt habe ... –