Ich verschlüssle einige Daten mit AES in einer Serveranwendung, die in C# geschrieben wird. Ich verwende einen vordefinierten Schlüssel (32 Bytes) und IV (16 Byte), zum Beispiel ...Verschiedene Verschlüsselungsergebnisse mit C# und CryptoJS
Key: 81fe1681..6a451c1c
IV: e83c..ae76
Dieser meinen C# Code ist I verwenden, die Daten zu verschlüsseln:
async Task<byte[]> Encrypt(string privateKey, string pin, byte[] data)
{
using (var sha = SHA256.Create())
{
byte[] keyHash = sha.ComputeHash(Encoding.UTF8.GetBytes($"{privateKey}"));
byte[] pinHash = sha.ComputeHash(Encoding.UTF8.GetBytes($"{pin}"));
using (Aes aes = Aes.Create())
{
byte[] key = keyHash.Slice(0, aes.Key.Length);
byte[] iv = pinHash.Slice(0, aes.IV.Length);
using (ICryptoTransform transform = aes.CreateEncryptor(key, iv))
using (var stream = new MemoryStream())
using (var cryptStream = new CryptoStream(stream, transform, CryptoStreamMode.Write))
{
await cryptStream.WriteAsync(data, 0, data.Length);
await cryptStream.FlushAsync();
return stream.ToArray();
}
}
}
}
Das verschlüsselte Ergebnis Daten sehen wie aus ...
534c..28f5
Jetzt möchte ich die Daten in einer Client-Anwendung mit CryptoJS entschlüsseln. Ich benutze exakt die gleichen Schlüssel- und IV-Informationen, aber die Entschlüsselung scheint fehlzuschlagen ... zumindest ist das entschlüsselte Ergebnis immer leer.
Also verschlüsselte ich die Daten auf dem Client (natürlich gleichen Schlüssel und IV) und im Ergebnis der verschlüsselte Text ist anders; genauer gesagt ist es identisch, aber mehr Daten am Ende ...
534c..28f5bbd5..ac0e
Was am Ende hat, ist diese zusätzlichen Daten, die ich bekommen, wenn ich dont die Daten auf dem Server zu verschlüsseln?
Wenn ich den verschlüsselten Text entschlüsseln, der auf dem Client verschlüsselt wurde, funktioniert die Entschlüsselung. Nur um es zu erwähnen, sind Modus und Auffüllen sowohl auf dem Server als auch auf dem Client Standard, nämlich CBC
und Pkcs7
; keysize sollte 256
sein. Dies ist der Code, den ich verwende, um die Daten zu entschlüsseln, das vom Server chiffriert wurde:
let keyHash: WordArray = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(privateKey));
let key: WordArray = CryptoJS.lib.WordArray.create(keyHash.words.slice(0, 8), 32);
let pinHash: WordArray = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(pin));
let iv: WordArray = CryptoJS.lib.WordArray.create(pinHash.words.slice(0, 4), 16);
let cfg: CryptoJS.lib.IBlockCipherCfg = { iv: iv };
let paramsData: CryptoJS.lib.CipherParamsData = {
ciphertext: cipherBuffer
};
let decrypted: WordArray = CryptoJS.AES.decrypt(paramsData, key, cfg);
Danke. Das hat das Problem behoben. – Matze