Я работаю над назначением обработки файла / каталога и зашифровал файл (в шестнадцатеричный формат, затем XOR).Файл, который мне нужно расшифровать, находится в шестнадцатеричном формате, поэтому мне нужно расшифровать, затем в шестнадцатеричном виде.Однако только первая строка моего файла расшифровывается правильно (ключ короче файла, поэтому он повторяется, следовательно, keyItr) Это код шифрования:
String encrypHexa="";
Scanner x = new Scanner(f);
while(x.hasNext()){
String a= x.nextLine();
int keyItr=0;
for (int i=0; i<a.length();i++){
//XOR
int temp = a.charAt(i) ^ key.charAt(keyItr);
encrypHexa += String.format("%02x",(byte)temp);
keyItr++;
if(keyItr==key.length()){
keyItr=0; } }
} System.out.println("Encrypted is: " +encrypHexa);
Это код расшифровки:
String hexiToDeci="";
Scanner x = new Scanner(f);
while(x.hasNext()){
String a= x.nextLine();
for (int i=0;i<a.length()-1;i+=2){
String output=a.substring(i,i+2);
int decimal = Integer.parseInt(output,16);
hexiToDeci += (char)decimal;
}
//Decrypt with XOR
int keyItr=0;
for (int i=0; i<hexiToDeci.length();i++){
//XOR
int temp = hexiToDeci.charAt(i) ^ key.charAt(keyItr);
decrypText +=(char)temp; keyItr++;
if(keyItr==key.length()){ keyItr=0; } }
}
System.out.println("Encrypted is: " +decrypText);
ввод:
new new new new
old old old old
в зашифрованном виде: 3f1212521a1c024901152c115c56533e1b01521b151149001c3f115d5f40:
new new new new?4d,H1wyMe$*)e
проверено с ключом: Qwertyuiop [123 $ 4 56 $1013 *