Как установить результат в текстовом поле с помощью java netbeans
Я пытаюсь разработать программу, в которой пользователь будет вводить текст в текстовое поле (plaintext), затем пользователь должен выбрать ключевые кнопки (key_128) (key_192) (key_256), затем он нажмет на кнопку (encrypt_data), чтобы зашифровать введенный пользователем текст. Затем он покажет вывод в другом текстовом поле (шифрование)
Это исходный код, над которым я работаю
public class MARS extends javax.swing.JFrame { static Cipher cipher; private static int[] K; private static final int [] s_box ={ // s_box values here }; private static int rotl(int val, int pas) { return (val << pas) | (val >>> (32 - pas)); } private static int rotr(int val, int pas) { return (val >>> pas) | (val << (32-pas)); } private static int[] expandKey(byte[] key){ int n = key.length/4; int[] tmp = new int[40]; int[] data = new int[n]; for(int i =0;i<data.length;i++) data[i] = 0; int off = 0; for(int i=0;i<data.length;i++){ data[i] = ((key[off++]&0xff))| ((key[off++]&0xff) << 8) | ((key[off++]&0xff) << 16) | ((key[off++]&0xff) << 24); } int[] T = new int[15]; for(int i=0;i<T.length;i++){ if(i<data.length) T[i] = data[i]; else if(i == data.length) T[i] = n; else T[i] = 0; } for(int j=0;j<4;j++){ for(int i=0;i<T.length;i++) T[i] = T[i] ^ (rotl(T[Math.abs(i-7 %15)] ^ T[Math.abs(i-2 %15)],3) ^ (4*i+j)); for(int c=0;c<4;c++) for(int i=0;i<T.length;i++) T[i] = T[i] + rotl(s_box[(int)(T[Math.abs(i-1%15)] & 0x000001ff)],9); for(int i = 0;i<=9;i++) tmp[10*j+i] = T[4*i%15]; } int[] B = {0xa4a8d57b, 0x5b5d193b, 0xc8a8309b, 0x73f9a978}; int j,w,m,r,p; for(int i = 5;i<=35;i++){ j = tmp[i] & 0x00000003; w = tmp[i] | 0x00000003; m = generateMask(w); r = tmp[i-1] & 0x0000001f; p = rotl(B[j],r); tmp[i] = w ^ (p & m); } return tmp; } private static int generateMask(int x){ int m; m = (~x ^ (x>>>1)) & 0x7fffffff; m &= (m >> 1) & (m >> 2); m &= (m >> 3) & (m >> 6); if(m == 0) return 0; m <<= 1; m |= (m << 1); m |= (m << 2); m |= (m << 4); m |= (m << 1) & ~x & 0x80000000; return m & 0xfffffffc; } public static byte[] encryptBloc(byte[] in){ byte[] tmp = new byte[in.length]; int aux; int[] data = new int[in.length/4]; for(int i =0;i<data.length;i++) data[i] = 0; int off = 0; for(int i=0;i<data.length;i++){ data[i] = ((in[off++]&0xff))| ((in[off++]&0xff) << 8) | ((in[off++]&0xff) << 16) | ((in[off++]&0xff) << 24); } int A = data[0],B = data[1],C = data[2],D = data[3]; A = A + K[0]; B = B + K[1]; C = C + K[2]; D = D + K[3]; //forward mixing for(int i = 0;i<=7;i++){ B = B ^ s_box[A & 0xff]; B = B + s_box[(rotr(A,8) & 0xff) + 256]; C = C + s_box[rotr(A,16) & 0xff]; D = D ^ s_box[(rotr(A,24) & 0xff) + 256]; A = rotr(A,24); if(i == 1 || i == 5) A = A + B; if(i == 0 || i == 4) A = A + D; aux = A; A = B; B = C; C = D; D = aux; } int R,L,M; int[] eout; //cryptographic core for(int i = 0;i<=15;i++){ eout = E_func(A, K[2*i+4], K[2*i+5]); A = rotl(A,13); C = C + eout[1]; if(i<8) { B = B + eout[0]; D = D ^ eout[2]; } else{ D = D + eout[0]; B = B ^ eout[2]; } aux = A; A = B; B = C; C = D; D = aux; } //backward mixing for(int i = 0;i<=7;i++){ if(i == 3 || i == 7) A = A - B; if(i == 2 || i == 6) A = A - D; B = B ^ s_box[(A & 0xff) + 256]; C = C - s_box[rotr(A,24) & 0xff]; D = D - s_box[(rotr(A,16) & 0xff) + 256]; D = D ^ s_box[rotr(A,8) & 0xff]; A = rotl(A,24); aux = A; A = B; B = C; C = D; D = aux; } A = A - K[36]; B = B - K[37]; C = C - K[38]; D = D - K[39]; data[0] = A;data[1] = B;data[2] = C;data[3] = D; for(int i = 0;i<tmp.length;i++){ tmp[i] = (byte)((data[i/4] >>> (i%4)*8) & 0xff); } return tmp; } private static int[] E_func(int in,int k1,int k2){ int[] tmp = new int[3]; int M,L,R; M = in + k1; R = rotl(in,13) * k2; L = s_box[M & 0x000001ff]; R = rotl(R,5); M = rotl(M,R & 0x0000001f); L = L ^ R; R = rotl(R,5); L = L ^ R; L = rotl(L,R & 0x0000001f); tmp[0] = L; tmp[1] = M; tmp[2] = R; return tmp; } public static byte[] encrypt(byte[] in,byte[] key){ K = expandKey(key); int lenght=0; byte[] padding = new byte[1]; int i; lenght = 16 - in.length % 16; padding = new byte[lenght]; padding[0] = (byte) 0x80; for (i = 1; i < lenght; i++) padding[i] = 0; byte[] tmp = new byte[in.length + lenght]; byte[] bloc = new byte[16]; int count = 0; for (i = 0; i < in.length + lenght; i++) { if (i > 0 && i % 16 == 0) { bloc = encryptBloc(bloc); System.arraycopy(bloc, 0, tmp, i - 16, bloc.length); } if (i < in.length) bloc[i % 16] = in[i]; else{ bloc[i % 16] = padding[count % 16]; count++; } } if(bloc.length == 16){ bloc = encryptBloc(bloc); System.arraycopy(bloc, 0, tmp, i - 16, bloc.length); } return tmp; }
Это код, который я написал в кнопке (encrypt_data), но он дает ошибку :(
byte[] plain = plaintext.getText().getBytes(); if (key_128.isSelected()) { byte[] K = getText().getBytes(); } else if (key_192.isSelected()) { byte[] K = getText().getBytes(); } else if (key_256.isSelected()){ byte[] K = getText().getBytes(); } byte[] encrypted = encrypt(plain, K); String encrypted = encrypt.setText();
И мне нужно установить значения в ключевых кнопках (key_128) (key_192) (key_256). Как я могу это сделать на java? Каждый ключ будет иметь двоичное значение
Что я уже пробовал:
я попытался установить значения в кнопке encrypt_data, но это не сработало
Richard MacCutchan
Какая ошибка? Но было бы гораздо проще выбросить весь этот спагетти-код и использовать классы шифрования Java: шифрование java - поиск в Google[^].
Member 13725790
@Richard MacCutchan. Извините за мой поздний ответ, но проблема заключается в getText() , что в операторах if else и последней строке, показывающей результат в textbox encrypt
Richard MacCutchan
Глядя на ваш код, я не думаю, что вы можете позвонить getText()
таким образом. Этот вызов должен быть связан с объектом JTextField.
Member 13725790
Я просто изменил весь код на то, что вы рекомендовали. Но я не уверен, как получить вывод в Jtextbox или дать K целочисленное значение, поэтому, как только пользователь нажимает эту клавишу, он непосредственно вычисляет, как калькулятор 😥 как я могу это сделать? Я пытался искать но ничего не получалось
Richard MacCutchan
Извините, я тоже не знаю; ваш код нелегко понять. Я предлагаю вам перейти к документации Java (Обзор (Java Platform SE 8 )[^]) по конкретным вопросам, а также Учебные Пособия По Java™ [^] для общих примеров кода и учебных пособий.
Member 13725790
Не извиняйся. Я очень ценю ваше предложение о помощи. Кроме того, ты помог мне, и я очень благодарен тебе. Я согласен, что это сложный код. Но я продолжу искать и благодарю вас за ссылки 👍 🌹
Member 13725790
я придумал решение, но в строке 2 есть ошибка, если вы можете мне помочь, пожалуйста. и я опубликовал еще один вопрос, связанный с этим. спасибо