Jasoos (Algoritmo di crittografia)
Sto lavorando alla crittografia e decrittografia dell'applicazione web. Ho costruito un algoritmo che utilizza una chiave lunga 24 bit per crittografare / decodificare il messaggio.
Controlla questo algoritmo e per favore suggerisci qualcosa di importante e di errore in questo algoritmo che possa farlo funzionare meglio. Inoltre, condividi i modi in cui posso testare la forza di questo algoritmo. Il tuo contributo può aiutarci a migliorare il nostro algoritmo.
Il codice è fornito sul mio GitHub
Algoritmo: -
1] La chiave inserita / generata a 24 cifre verrà convertita in codice ASCII con codice a 24 cifre.
public void setKey(char[] arr){
for(int i=0;i<24;i++){
key[i] = (int)arr[i];
}
}
2] La stringa inserita verrà modificata in un array di caratteri.
Ogni carattere verrà quindi incrementato prima con il valore della chiave e modificato in codice binario a 10 bit.
public void Encryption(String text){
char[] msg = text.toCharArray();
int flag = 0;
int l = msg.length;
for(int i=0;i<l;i++){
int a = (int)msg[i];
// System.out.print(msg[i]+" "+a+"-> ");
if(flag>23)
flag=0;
int b=a+key[flag];
flag++;
//System.out.print(b+" | ");
String z = binary(b);
sb.append(lookUpTool(z));
//Character.toString((char)b);
}
//sb.append(sumBinary);
sb = comp1(sb);
}
3] lookUp (): - Prenderà una stringa di 10 bit come input e una matrice, e dividerà quella stringa in due codici binari a 5 bit.
Quindi calcoleremo il valore decimale di ogni codice binario a 5 bit.
Esempio : 0011101101 - > 00111 = 7 e 01101 = 13
Abbiamo una matrice di 32 x 32 dimensioni che ha valori casuali univoci da 0 a 1023 e non sarà condivisa pubblicamente.
Per 0011101101 cercheremo il settimo numero e il tredicesimo valore della colonna. Quel valore sarà cambiato in codice binario a 10 bit.
public String lookUp(String bits, int[][] mat){
int mid = Math.round((float) bits.length() / 2);
String part1 = bits.substring(0, mid);
String part2 = bits.substring(mid, bits.length());
int row=binaryValue(part1);
int col=binaryValue(part2);;
//System.out.print("row: "+row);
// System.out.println("|| col: "+col);
int a = mat[row][col];
return binary(a);
}
4] Eseguiremo questa procedura dieci volte con dieci diverse matrici private mediante il metodo lookUpTool.
public String lookUpTool(String s){
String s1 = lookUp(s,matrix1);
String s2 = lookUp(s1,matrix2);
String s3 = lookUp(s2,matrix3);
String s4 = lookUp(s3,matrix4);
String s5 = lookUp(s4,matrix5);
String s6 = lookUp(s5,matrix6);
String s7 = lookUp(s6,matrix7);
String s8 = lookUp(s7,matrix8);
String s9 = lookUp(s8,matrix9);
String s10 = lookUp(s9,matrix10);
return s10;
}
Allo stesso modo, lo faremo per ogni carattere nel testo / stringa e lo cripteremo.
** Gli esempi sono forniti di seguito: -
Chiave : c | H @ yLzd3PkRte0H, u16zt8N
Messaggio : abcd ef $
Dopo la crittografia : 11001111000001101010000010000101101000001110100000101010111001110000011000001000