Эй, ребята, я хотел знать, могу ли я немного помочь: Im пытается подсчитать в шестнадцатеричном массиве байтов. Что я делаю, у меня есть простой текст в виде 8 шестнадцатеричных чисел и шифрованного текста в том же виде, что и первые 4 номера ключа. И я пытаюсь использовать DES, чтобы взломать ключ с помощью грубой силы.Цикл через шестнадцатеричные числа в массиве байтов
мой ключ выглядит следующим образом:
[A3 BB 12 44 __ __ __ __]
и я хочу, чтобы начать, как это я полагаю:
[A3 BB 12 44 00 00 00 00]
затем
[A3 BB 12 44 00 00 00 01]
и так далее. Я просто не знаю, как считать в гексагоне. внутри массива байтов!
любая помощь очень ценится!
EDITED ПОСЛЕ МНОГО HELP
здесь найти ключ (я изменил некоторые из названий вещей вокруг, чтобы лучше соответствовать моей программе)
public static void findKey(){
byte [] keyBytes = null;
byte [] pt;
byte [] ct;
codeBreaker KEY = new codeBreaker(new byte[]{(byte)0x01, (byte)0x23, (byte)0x45, (byte)0x67, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00}, 2);
String plaintext = "Plaintxt";
ct = new byte [] {(byte)0x4A, (byte)0xC4, (byte)0x55, (byte)0x3D, (byte)0xB3, (byte)0x37, (byte)0xCA, (byte)0xB3};
//convert the plain text "Plaintxt" into a hex byte array
String ptHex = asciiToHex(plaintext);
pt = getBytes(ptHex);
//keyBytes = KEY.inc()
//my attempt
/*while(!isKey(pt,keyBytes,ct)){
KEY.inc(); // something like increase the key by 1 and send t back in.
}
*/
//this is your original while loop
/*while (KEY.inc()) {
byte[] bytes = KEY.getBytes();
for (byte b: bytes) {
System.out.printf("%02X ", b);
}
System.out.println();
}
*/
//Final outputs for the findKey method
System.out.println(" Plain Text In Hex Is:");
printByteArray(pt);
System.out.println();
System.out.println(" The Cipher Text Is:");
printByteArray(ct);
System.out.println();
}
и вот материал, который Вы придумали
public codeBreaker(byte[] keyAr, int startIndex) {
this.key = keyAr;
this.startIndex = startIndex;
}
public boolean inc() {
int i;
for (i = key.length-1; i >= startIndex; i--) {
key[i]++;
if (key[i] != 0)
break;
}
// we return false when all bytes are 0 again
return (i >= startIndex || key[startIndex] != 0);
}
public byte[] getBytes() {
return key;
}
который я все положил в один класс и назвал его codeBreaker с остальными методами, которые у меня есть (но те, имеют какое-либо отношение к этой конкретной части)
* «Эй было интересно, если я мог бы получить немного интеллектуальную помощь» * - Не круглый здесь мат. Мы все просто «тупые программисты» ... точно так же, как вы :-) :-) –
@StephenC: говорите сами. Я считаю себя интеллектуальным тяжелым весом, прямо там с Рашем Лимбо и Дональдом Трампом. –
Серьезно, хотя байт не знает и не заботится о том, является ли он шестнадцатеричным или нет, поскольку это просто строковое представление байта. Можете ли вы дать больше информации о том, что вы пытаетесь сделать? Откуда берется массив байтов, почему вы не можете просто перебирать его с помощью цикла for и т. Д. –