шифровать, расшифровывать, используя java, строку в бит, затем какую-то операцию и обратно в строку - PullRequest
0 голосов
/ 24 февраля 2020

Я использовал эти два метода для шифрования и дешифрования (feistel), но они не работают, вероятно, они всегда дают мне один и тот же вывод. Кто-нибудь имеет какие-либо идеи, как их исправить, пожалуйста?

вот метод шифрования, берет строку, затем преобразовывает ее в бит и затем разделяет ее, затем выполняет некоторую операцию над частью 2 после разделения, затем переписывает ее с частью1 , затем поменяйте местами и сделайте xor вторую часть, а part2 первую. в течение 2 раундов.

  public static String encrypt(String s) {

String str = s;

for(int i = 0 ; i<=1 ; i++) {

// split-convert for function + xor 
String part1 = str.substring(0, str.length() / 2);
String part2 = str.substring(str.length() / 2);
byte[] part1Bytes = part1.getBytes();
byte[] part2Bytes = part2.getBytes();
BitSet part1BitSet = BitSet.valueOf(part1Bytes);
BitSet part2BitSet = BitSet.valueOf(part2Bytes);
BitSet temp = part2BitSet;

// key based on i 
if (i == 0) 
part2BitSet.or(new BitSet(7)); // key 7 

if (i == 1)
part2BitSet.or(new BitSet(11)); // key 11

// xor
part2BitSet.xor(part1BitSet);

// swap
byte[] split1 = part2BitSet.toByteArray(); 
byte[] split2 = temp.toByteArray();
String sS1 = split1.toString();
String sS2 = split2.toString();

str = sS1+""+sS2;
}

// convert to String
String AfterEnc = ""; // need to convert

return str;
}

метод расшифровки делает обратное и должен дать точную строку перед шифрованием.

public static String decrypt(String s) {

String str = s;

for(int i = 0 ; i<=1 ; i++) {

String part1 = str.substring(0, str.length() / 2);
String part2 = str.substring(str.length() / 2);
byte[] part1Bytes = part1.getBytes();
byte[] part2Bytes = part2.getBytes();
BitSet part1BitSet = BitSet.valueOf(part1Bytes);
BitSet part2BitSet = BitSet.valueOf(part2Bytes);
BitSet temp = part1BitSet;

// key based on i 
if (i == 0) 
part1BitSet.or(new BitSet(11)); // key 7 

if (i == 1)
part1BitSet.or(new BitSet(7)); // key 11

// xor
part1BitSet.xor(part2BitSet);

// swap
byte[] split1 = part1BitSet.toByteArray(); 
byte[] split2 = temp.toByteArray();
String sS1 = split1.toString();
String sS2 = split2.toString();

str = sS2+""+sS1;

}

return str;

}

спасибо.

...