Ho una domanda sulla chiave AES e sulla lunghezza IV.CryptoJS e lunghezza chiave/IV
Prima di tutto, se, per esempio, sto usando droghe OpenSSL
estensione e openssl_encrypt()
metodo, posso vedere chiaramente che fondamentale per a 256-bit AES dovrebbe essere byte, e IV getta avvertimento se è diverso da byte. Posso capirlo, e tutto va bene.
Tuttavia, nella libreria CryptoJS
la chiave e la lunghezza IV sono frustranti. Questo è un esempio:
var text = "test",
key = "us5N0PxHAWuIgb0/Qc2sh5OdWBbXGady",
iv = "zAvR2NI87bBx746n";
key = CryptoJS.enc.Base64.parse(key);
iv = CryptoJS.enc.Base64.parse(iv);
crypted = CryptoJS.AES.encrypt(text, key, { iv: iv });
dove chiave è byte, IV è . CryptoJS richiede di analizzarlo, e dopo CryptoJS.enc.Base64.parse()
ottengo 48 e 24 byte di conseguenza. Mi aspetto che tali valori vengano troncati alla lunghezza richiesta da a 256-bit AES, e un'ulteriore espansione a n byte sarà irrilevante, e quindi il testo cifrato risultante sarà lo stesso.
Ma questo non sta realmente accadendo. Quando passo a CryptoJS.A.a.encrypt() una chiave di dimensioni maggiori e anche a IV, sta producendo output diversi. Quindi la mia domanda è, perché? Qual è la differenza tra la libreria CryptoJS e OpenSSL in questo caso?
1. C'è qualcosa che non va con i tuoi numeri. AES ha una dimensione di blocco di 128 bit che è anche la dimensione prevista della IV. AES non è specificato per IVs più grandi o più piccoli di 16 byte.La dimensione IV non è uguale alla dimensione della chiave. 2. 22 byte non è una stringa codificata base64 valida. Deve essere divisibile per 4 (con caratteri pad opzionali). –
Oggetto I. AES ha dimensioni del blocco 128 se è AES-128. Nel caso di AES-256 - la dimensione del blocco è, ovviamente, 256 bit, ovvero 32 byte, che è esattamente ciò che si ottiene con 'CryptoJS.enc.Base64.parse()' di 22 byte Base64 stringa. Secondo la specifica e l'algoritmo, IV è esattamente la lunghezza della dimensione del blocco, che è 32 byte con AES-256. – Nevertheless
Per una spiegazione più approfondita, fare riferimento a http://security.stackexchange.com/questions/15740/what-are-the-variables-of-aes – Nevertheless