Domanda

Ho bisogno di usare qualche meccanismo di crittografia in uno dei progetti cui sto lavorando. Stavo esplorando la crittografia RSA e scritto alcuni programmi di esempio per imparare.

Mi rendo conto che la dimensione del blocco di crittografia RSA è di 16 byte. Così ho dato la stringa "12345678" come input per la funzione di seguito:

public static string Encrypt (string input) {
    var byteConverter = new UnicodeEncoding ();

    RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider();
    byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false);
    return BytesToString (output); //BytesToString () converts the bytes to hex string
}

Ora la stringa codificata che ottengo è di 128 byte (256 caratteri esadecimali). Questa stringa è troppo grande per me. Ero un po 'sperando che avrei ricevuto 16 byte di dati crittografati se mi danno 16 byte di dati semplici. Sto facendo qualcosa di sbagliato? È questo ciò che dovrebbe succedere? Posso in qualche modo accorciare dati crittografati?

È stato utile?

Soluzione

Ti sbagli. RSA non è un cifrario a blocchi, così non si può davvero parlare la dimensione del blocco di esso.

L'uscita di una cifratura RSA avrà la stessa lunghezza del modulo RSA. Non hai indicato alcun tasto RSA nel codice, quindi il runtime (per quanto mi ricordo) utilizzare un tasto predefinito. Quella chiave apparentemente ha un modulo a 1024 bit, il che spiega la lunghezza di uscita.

Si potrebbe voler esaminare la crittografia AES, invece. Per molte ragioni si dovrebbe normalmente usare solo RSA per cifrare una chiave e quindi utilizzare AES o un simile algoritmo di crittografia simmetrica per crittografare il testo vero e proprio.

AES è un cifrario a blocchi con dimensione del blocco di 16 byte, in modo che (a seconda di quale imbottitura si usa e come si trasportare il vettore di inizializzazione) cifrare 16 byte di dati semplici a 16 byte di dati crittografati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top