Perché l'impostazione del testo cifrato su 21 caratteri significa che il testo semplice non è nulla in AES256

0

Diciamo che ho il seguente dove k è qualsiasi stringa di lunghezza

Se faccio il seguente

var p = aes256.decrypt(k, 'XXXXXXXXXXXXXXXXXXXXX');

Il valore di p sarà sempre uguale a nulla. Questo può essere spiegato in termini molto semplici?

XXXXXXXXXXXXXXXXXXXXX è una stringa di 22 caratteri se faccio quanto segue dove p è una stringa di 5 byte.

var c = aes256.encrypt(k, p);

Ecco un codice nel nodo

var aes256 = require('aes256');
var k = 'THIS IS MY ONE AND ONLY KEY'; // A KEY
var p = 'ABCDE'; // 5 CHARACTER STRING
var e = aes256.encrypt(k, p);
console.log (e);
var decrypted_1 = aes256.decrypt(k, e);
console.log (decrypted_1)
var decrypted_2 = aes256.decrypt(k, 'AAAAAAAAAAAAAAAAAAAAAA');
console.log (decrypted_2)

Il valore di decrypted_2 è vuoto - Non capisco perché

    
posta pee2pee 27.12.2017 - 10:41
fonte

1 risposta

1

La mia ipotesi è che ti riferisci a questa libreria JS . Mentre la documentazione incompleta suggerisce che sia AES-256 con la chiave e il testo cifrati, uno sguardo al codice suggerisce che fa qualcos'altro: la chiave non è la chiave AES ma la chiave AES sarà derivata da essa usando SHA256. E l'input non è il testo cifrato ma verrà trattato come Base64. Utilizzerà anche il primo 16 byte dell'ingresso decodificato come IV e quindi decrittograferà il successivo 16 byte. Ciò significa che per coprire almeno 1 byte di testo normale il tuo input deve essere un binario a 17 byte (16 byte IV + 1 byte di dati). Questo binario a 17 byte risulta in una stringa codificata in base64 a 23 byte e qualsiasi input più breve di quello non conterrà alcun dato da decodificare.

    
risposta data 27.12.2017 - 11:16
fonte

Leggi altre domande sui tag