Программирование шифровальной программы (обычный текст-> Шифр Цезаря-> ASCII)?

#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 "";
    }
}  
}