#java #ascii #encryption
#java #ascii #шифрование
Вопрос:
Мне действительно нужно знать, как вы бы закодировали это или что-то подобное на Java: http://www.cs.carleton.edu/faculty/adalal/teaching/f05/107/applets/ascii.html
Вот моя попытка, я занимался этим весь день (буквально), и мне пришлось искать, как это сделать в Интернете, потому что, но поскольку мои знания Java не так велики, я не могу ничего понять (в начале сегодняшнего дня я не знал ничего общего с массивами)все, что мне нужно, это небольшая помощь или толчок в правильном направлении.
[редактировать] Извините, забыл указать на вопрос. С чем у меня возникают проблемы, так это не с преобразованием и шифрованием открытого текста, а с попыткой преобразовать закодированное сообщение (зашифрованное с помощью моей программы, конечно) в открытый текст (т.Е. Я не могу просто изменить его с помощью переменной в моей программе, я на самом деле должен уметь его читать и декодировать)
private void encryptBUTActionPerformed(java.awt.event.ActionEvent evt)
{
int encryptLength=encryptTXT.getText().length();
int[] anArray=new int[encryptLength];
String key=encryptKey.getText();
if(key.isEmpty())
{
decryptTXT.setText("" "INVALID KEY");
}
else
{
int key2=Integer.parseInt(key);
for(int i=0;i<encryptLength;i )
{
int letter = encryptTXT.getText().toLowerCase().charAt(i);
System.out.println(letter);
System.out.println((char)letter);
int letterCiphered= (letter-key2);
anArray[i]=letterCiphered;
}
String output=(Arrays.toString(anArray));
decryptTXT.setText(output);
}
}
private void clearBUTActionPerformed(java.awt.event.ActionEvent evt)
{
mainPassword.setText("");
encryptTXT.setText("");
decryptTXT.setText("");
encryptKey.setText("");
decryptKey.setText("");
}
private void decryptBUTActionPerformed(java.awt.event.ActionEvent evt)
{
int textLength=decryptTXT.getText().length();
ArrayList list=new ArrayList();
String text=decryptTXT.getText();
int count=1;
String key=decryptKey.getText();
if(key.isEmpty())
{
encryptTXT.setText("" "INVALID KEY");
}
else
{
int key2=Integer.parseInt(key);
for(int i=0;i<textLength;i )
{
if(text.charAt(i)=='['||text.charAt(i)==','||text.charAt(i)==']')
{
count=count 1;
}
else if(count%2==0)
{
char number=text.charAt(i);
char number2=text.charAt(i 1);
int num=(int)number;
int num2=(int)number2;
int num3=num;
int num4=num3 num2-15;
int num5=num4 key2;
char letter2=(char)num5;
list.add(letter2);
count=count 1;
}
else
{
}
}
Object[] obj=(list.toArray());
String out=Arrays.toString(obj);
encryptTXT.setText(out);
}
}
Комментарии:
1. Редактировать: срок выполнения удален, поскольку это не имеет отношения к рассматриваемой проблеме кодирования.
2. Ошибка мыши извините, ребята, не хотел обидеть.
3. Должным образом отмечено. Я буду иметь это в виду.
4. Можете ли вы решить это за пределами Swing? Я предлагаю создать небольшую тестовую программу, которая не имеет кода GUI, но вместо этого использует некоторые тестовые строки и значения по умолчанию, информацию, которую вы получили бы из своих текстовых компонентов Swing, а затем попытаться решить это в простой среде, а не решать ее в сложной. Затем, если вы все еще застряли, вы можете опубликовать свою небольшую компилируемую и запускаемую тестовую программу, и мы поможем ее модифицировать и заставить работать.
5. просто предложение: не атакуйте сложные проблемы, такие как шифрование, если вы новичок в программировании. Когда-либо. Единственное, чего вы добьетесь, это путаницы. Начните с приложений hello-world и продвигайтесь дальше, все остальное — гарантированный провал
Ответ №1:
Решаемая
Вот как я зашифровал свой текст:
int encryptLength=encryptTXT.getText().length();
String key=encryptKey.getText();
String text="";
if(key.isEmpty())
{
decryptTXT.setText("" "INVALID KEY");
}
else
{
int key2=Integer.parseInt(key);
for(int i=0;i<encryptLength;i )
{
int letter = encryptTXT.getText().toLowerCase().charAt(i);
int letterCiphered = (letter-key2);
text=text letterCiphered " ";
}
decryptTXT.setText("" text);
}
Вот как я расшифровал свой текст
try
{
String text=decryptTXT.getText();
String key=decryptKey.getText();
String[] decrypt=text.split(" ");
String sentance="";
if(key.isEmpty())
{
encryptTXT.setText("" "INVALID KEY");
}
else
{
int key2=Integer.parseInt(key);
for(int i=0;i<decrypt.length;i )
{
int number=Integer.parseInt(decrypt[i]);
char letter=(char)(number key2);
sentance=sentance letter;
}
encryptTXT.setText("" sentance);
}
}
catch(NumberFormatException e)
{
encryptTXT.setText("" "Please enter a valid encoded message");
}
Спасибо за помощь, ребята, оказалось намного проще, чем я думал.
Ответ №2:
Кажется, что ваше шифрование просто сдвигает каждый символ сообщения на заданное значение.
int letterCiphered= (letter-key2);
Чтобы расшифровать такое сообщение, вы должны сдвинуть каждый символ шифра на то же значение, но в другом направлении.
int letter= (letterCiphered key2);
Функция дешифрования, которая у вас есть в коде, делает что-то совершенно другое.
обновление после комментариев:
Если я правильно понимаю, вы хотите преобразовать строку значений ascii в текст, который они представляют.
Чтобы разобрать входную строку, если это простой формат, вы можете просто использовать String.split()
read about it .
Чтобы преобразовать текстовое представление числа в фактическое число, вы могли бы использовать Integer.parseInt()
.
Наконец, чтобы превратить целое значение ascii в символ, вам нужно всего лишь привести char c = (char)97;
Проанализируйте входные данные, чтобы идентифицировать каждое значение ascii, преобразуйте каждое значение в целое число и преобразуйте его в символ, а затем просто объедините символы в строку.
Комментарии:
1. Да, это шифр Цезаря, но затем буквы преобразуются в соответствующие им значения ASCII и сохраняются в массиве, затем этот массив отображается в моем JTextField, и, извините, я был занят, обдумывая некоторые идеи, когда я опубликовал это, я знаю, как его расшифровать. Моя проблема заключается не в фактическом расшифровании, а в том, как мне извлекать только пары значений ASCII из введенного текста и преобразовывать их в текст (символы). если вы перейдете по URL-адресу, вы увидите, что я имею в виду, он не шифрует текст, но преобразует символ в ASCII и обратно.
2. байты можно преобразовать в символы, просто приведя их к нему: (char). Или строка может быть сформирована из массива байтов через
new String(myByteArray)
. Возможно, вы хотите использовать массив байтов, а не массив int.3. Я читал что-то ранее о строковых методах для сопоставления с образцом 2, которые выглядели многообещающими
match()
, иreplace()
могли ли они быть возможными, поскольку я сказал, что я действительно этого не понимаю, поэтому я не смог это реализовать.4. Было бы действительно здорово, если бы я мог создать версию JTextField
System.println()
, которая значительно упростила бы задачу.5. @ChaseVsGodzilla Вы хотите что-то вроде JTextArea.append(…).
Ответ №3:
package cipher;
import java.io.*;
import java.util.Scanner;
public class Cipher {
public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
public static final String ADDRESS = "C:\Users\abhati\Documents\NetBeansProjects\Cipher\encode.txt";
public static final String LOCATE = "C:\Users\abhati\Documents\NetBeansProjects\Cipher\decode.enc";
public static int MenuOption() throws Exception
{
int option;
do{
System.out.println(" n 1. Encrypt ");
System.out.println(" n 2. Decrypt ");
System.out.println(" n 3. Quit n ");
System.out.println("nWhat would you like to do?");
Scanner input = new Scanner(System.in);
option = input.nextInt();
switch(option)
{
case 1: encrypt();
break;
case 2: decrypt();
break;
case 3: System.exit(0);
break;
default: System.out.println("WRONG INPUT ??? PLEASE SELECT THE OPTION n");
}
} while(option != 3);
return option;
}
public static void main(String[] args) throws Exception
{
System.out.println("Hello to Change Your text into cipher text!!!!n");
System.out.println("Put your text file in root folder.n");
MenuOption();
System.out.println();
}
public static void encrypt() throws Exception {
String ex;
FileReader in=null;
FileWriter out = null;
try {
File file = new File(ADDRESS);
in = new FileReader(file);
file.getName();
ex=getFileExtensionE(file);
if(ex.equals("txt"))
{
out = new FileWriter(LOCATE);
Scanner input2 = new Scanner(System.in);
System.out.println("What is the value for the key?");
int key = input2.nextInt();
Scanner input3 = new Scanner(in);
while (input3.hasNext()) {
String line = input3.nextLine();
line = line.toLowerCase();
String crypt = "";
for (int i = 0; i < line.length(); i ) {
int position = ALPHABET.indexOf(line.charAt(i));
int keyValue = (key position) % 26;
char replace = ALPHABET.charAt(keyValue);
crypt = replace;
}
out.write("" crypt);
System.out.println("" crypt);
}
input3.close();
System.out.println("nDATA ENCRYPTEDn");
}
else
{
System.out.println("DOESN'T ENCRYPTED!");
}
} catch(Exception e)
{
System.out.println("n NO FILE FOUND WITH THIS NAME!!!");
}
finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
public static void decrypt() throws Exception {
String ex;
FileReader in = null;
FileWriter out = null;
try {
File file = new File(LOCATE);
in = new FileReader(file);
file.getName();
ex=getFileExtensionD(file);
if(ex.equals("enc"))
{
out = new FileWriter("encrpted_DATA.txt");
Scanner input4 = new Scanner(System.in);
System.out.println("What is the value for the key?");
int key = input4.nextInt();
Scanner input5 = new Scanner(in);
while (input5.hasNext()) {
String line = input5.nextLine();
line = line.toLowerCase();
String decrypt = "";
for (int i = 0; i < line.length(); i ) {
int position = ALPHABET.indexOf(line.charAt(i));
int keyValue = (position - key) % 26;
if (keyValue < 0)
{
keyValue = ALPHABET.length() keyValue;
}
char replace = ALPHABET.charAt(keyValue);
decrypt = replace;
}
out.write("" decrypt);
System.out.println("" decrypt);
}
input5.close();
System.out.println("nDATA DECRYPTEDn");
}
else
{
System.out.println("DOESN'T DECRYPTED!");
}
} catch(Exception e)
{
System.out.println("n NO FILE FOUND WITH THIS NAME!!!");
}
finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
public static String getFileExtensionE(File file) {
String name = file.getName();
try {
return name.substring(name.lastIndexOf(".") 1);
} catch (Exception e) {
return "";
}
}
public static String getFileExtensionD(File file) {
String name = file.getName();
try {
return name.substring(name.lastIndexOf(".") 1);
} catch (Exception e) {
return "";
}
}
}