Я использовал эти два метода для шифрования и дешифрования (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;
}
спасибо.