Sieht aus wie ich es habe.
Wenn Sie benutzerdefinierte key
und IV
sich mit der CryptoJS passieren neigen, stellen Sie sicher, dass (unter der Annahme, dass CryptoJS.enc.Base64.parse()
HEX Zeichenfolge gibt, die in CryptoJS.AES.encrypt()
verwendet wird).
Einnahme dieses Beispiel mit Base64 Schlüssel und IV (Länge = 22), die CryptoJS verschlüsselt als AES-256:
var message = "some_secret_message";
var key = "6Le0DgMTAAAAANokdEEial"; //length=22
var iv = "mHGFxENnZLbienLyANoi.e"; //length=22
key = CryptoJS.enc.Base64.parse(key);
//key is now e8b7b40e031300000000da247441226a, length=32
iv = CryptoJS.enc.Base64.parse(iv);
//iv is now 987185c4436764b6e27a72f2fffffffd, length=32
var cipherData = CryptoJS.AES.encrypt(message, key, { iv: iv });
var data = CryptoJS.AES.decrypt(cipherData, key, { iv: iv });
//data contains "some_secret_message"
Länge des key
beträgt 32 Bytes für AES -256. (16 Byte, wenn Sie AES-128 erhalten möchten. Wenn mehr, CryptoJS zu höherer Schlüssellänge wechseln wird). In anderen Fällen erhalten Sie beim Entschlüsseln eine leere Nachricht. Beispiel:
var message = "some_secret_message";
var key = "6Le0DgMTAAAAANokdEEial1"; //length=23
var iv = "mHGFxENnZLbienLyANoi.e"; //length=22
key = CryptoJS.enc.Base64.parse(key); // length = 17 bytes
//key is now e8b7b40e031300000000da247441226a5d, length=34 (hex encoded)
iv = CryptoJS.enc.Base64.parse(iv); // length = 16 bytes
//iv is now 987185c4436764b6e27a72f2fffffffd, length=32 (hex encoded)
var cipherData = CryptoJS.AES.encrypt(message, key, { iv: iv });
var data = CryptoJS.AES.decrypt(cipherData, key, { iv: iv });
//data contains "" - an empty string
Auch von dem, was ich sehen kann, nur x % 8 == 0
Bytes eines solchen Anwendungsfall gibt gültiges Ergebnis.
Länge von IV
sollte 22 Bytes sein (wenn Base64 codiert), und während sie mit CryptoJS.enc.Base64.parse()
Umwandlung Sie 16 Byte (32 hex codiert) erhalten wird, die für AES-256 Blockgröße max. Alles andere wird abgeschnitten.
var message = "some_secret_message";
var key = "6Le0DgMTAAAAANokdEEial"; //length=22
var iv = "mHGFxENnZLbienLyANoi.e"; //length=22
key = CryptoJS.enc.Base64.parse(key); // length=16 bytes
//key is now e8b7b40e031300000000da247441226a5d, length=32 (hex encoded)
iv = CryptoJS.enc.Base64.parse(iv); // length=16 bytes
//iv is now 987185c4436764b6e27a72f2fffffffd, length=32 (hex encoded)
var cipherData = CryptoJS.AES.encrypt(message, key, { iv: iv });
var key = "6Le0DgMTAAAAANokdEEial"; //length=22
var iv = "mHGFxENnZLbienLyANoi.e123"; //length=25
key = CryptoJS.enc.Base64.parse(key); // length = 16 bytes
//key is now e8b7b40e031300000000da247441226a5d, length=32 (hex encoded)
iv = CryptoJS.enc.Base64.parse(iv); // length = 18 bytes
//iv is now 987185c4436764b6e27a72f2fffffffded76, length=36 (hex encoded)
var data = CryptoJS.AES.decrypt(cipherData, key, { iv: iv }); //data contains "some_secret_message", so additional "123" in IV is irrelevant.
1. Es ist etwas falsch mit Ihren Zahlen. AES hat eine Blockgröße von 128 Bit, was auch die erwartete Größe der IV ist. AES ist nicht für IVs angegeben, die größer oder kleiner als 16 Byte sind.IV-Größe ist nicht dasselbe wie Schlüsselgröße. 2. 22 Bytes ist keine gültige Base64-codierte Zeichenfolge. Es muss durch 4 teilbar sein (mit optionalen Pad Chars). –
Ich Objekt. AES hat Blockgröße 128, wenn es AES-128 ist. Im Falle von AES-256 - Blockgröße ist offensichtlich, 256 Bits, die 32 Bytes ist, was genau ist, was Sie durch CryptoJS.enc.Base64.parse() 'von 22 Byte Base64 String erhalten. Laut Spezifikation und Algorithmus ist IV genau die Blockgrößenlänge, die bei AES-256 32 Byte beträgt. – Nevertheless
Weitere Informationen finden Sie unter http://security.stackexchange.com/questions/15740/what-are-the-variables-of-aes – Nevertheless