Domanda

La domanda è per qualsiasi linguaggio moderno non gestito. Lingue simili a delphi, delphi, qualunque cosa.

Vorrei creare il mio algoritmo di crittografia che, a differenza di altri, riduce la lunghezza della stringa crittografata.

Il mio primo pensiero è stato quello di creare il mio sistema numerico simile a esadicimale, ma con più caratteri. Ad esempio [0..9] + [A..Z]. Ciò renderebbe un numero fino a 40 in un valore di una cifra. Potrei anche aggiungere altre cifre come '!,. /?) (#!' E così via.

La mia domanda è: come implementare un tale sistema numerico dalla A alla Z compreso tra 0 e 9. Devo dichiarare ogni singolo valore come costante fino a 0xZZZZZZZZ? questo renderebbe la mia vita terribile

Per favore, dammi i tuoi suggerimenti, esempi. :)

È stato utile?

Soluzione

Pensiamo a questo.

Ogni carattere Base 40 occupa 8 bit. Codifica un numero compreso tra 0 e 39, che è solo un capello in più di 5 bit di informazioni effettive.

Un singolo byte può rappresentare 256 valori diversi. Una codifica base 40 rappresenta solo 40 valori diversi nello stesso byte.

Questa sembra essere una perdita netta di 2-3 bit per byte codificata.

Detto questo, un valore di base 40 È una stringa e niente di più. Non è richiesta alcuna dichiarazione di database di fantasia - è solo una stringa.

Scrivi due funzioni: toBase40 (someBytes) e toBytes (someBase40string) per convertire le tue stringhe base40 in stringhe ordinarie.

Se desideri una soluzione esistente ben fatta, cerca base64 .

Altri suggerimenti

Dovresti cambiare il modo in cui funzionano i computer e l'archiviazione.

Non c'è memoria libera e non c'è modo di liberare spazio. Cambiare il sistema dei numeri ti darebbe più spazio quando lo scrivi su carta, ma nella memoria del computer, hai ancora bisogno della stessa quantità di bit.

Si noti inoltre che, se si desidera crittografare qualcosa, tale operazione impedisce anche qualsiasi compressione significativa poiché il contenuto crittografato deve essere il più vicino possibile al casuale.

Di solito una compressione dei moduli viene eseguita PRIMA della crittografia (GZip o qualcosa di simile) ma non funziona cambiando i sistemi di numerazione.

P.S. Utilizza alcuni algoritmi di crittografia comprovati.

In genere il modo in cui gli algoritmi di crittografia riducono le dimensioni del testo crittografato consiste nell'eseguire prima il testo attraverso un algoritmo di compressione per scopi generici, quindi crittografare il risultato compresso. In questo modo otterrai quasi sempre un risultato migliore rispetto al tentativo di combinare i due algoritmi in uno solo.

Le persone che hanno sviluppato algoritmi di crittografia hanno speso probabilmente milioni di ore uomo, anni nella scuola di specializzazione e post-dottorato per ottenere la loro esperienza. Cosa ti fa pensare di poter inventare qualcosa di meglio?

Probabilmente ti verrà in mente un algoritmo non sicuro.

Utilizza un algoritmo esistente e usa la compressione.

Consiglierei semplicemente di comprimere l'input (usando gzip, zlib o qualunque altra cosa) prima di crittografarlo. Questo è più facile e più sicuro della creazione del tuo algoritmo. (GnuPG fa questo, per esempio.)

Le stringhe Base64 sono comuni in molti linguaggi per computer ed è piuttosto standard. Utilizza i seguenti caratteri:

  

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

Vedi http://en.wikipedia.org/wiki/Base64 per maggiori informazioni

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