Mit dem folgenden Code, ich bin AES verschlüsseln Operation, ich gebe die gleiche Eingabe an verschiedenen Instanzen, aber ich bekomme verschiedene Cipher. Warum passiert das?Erzeugt AES/CBC/NoPadding zwei unterschiedliche Cipher-Texte, obwohl die Eingabe gleich ist?
public static byte[] encrypt(byte[] plainText, byte[] key)
{
byte[] passwordKey128 = Arrays.copyOfRange(key, 0, 16);
SecretKeySpec secretKey = new SecretKeySpec(passwordKey128, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherText = cipher.doFinal(plainText);
return cipherText;
}
Eingang ist
encrypt(new byte[]{-17, -60, -70, 24, 80, 35, 2, -62, -79, 19, -55, -50, -62, -69, -80, -96} ,new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0});
An einem Beispiel Chiffre ist - [0, 91, -96, 80, -44, -93, 107, 62, 4, -10, 103, 119 , 109, 4, 25, 68]
Ein anderer Fall ist - [87, 109, 20, 69, 18, 6, 103, 92, -57, 62, -41, -103, -18, -19, 74, 87]
Was kann der Grund sein?
Verwenden Sie den CBC-Modus nicht zusammen mit "NoPadding", es sei denn, Ihre Datengröße ist immer ein Vielfaches von 16 Byte - es funktioniert nicht. –