编写密码程序(纯文本 - > Caesar Cipher-> ASCII)?

时间:2011-10-30 16:24:45

标签: java ascii encryption

我真的需要知道如何在Java中编写这个或类似的代码: http://www.cs.carleton.edu/faculty/adalal/teaching/f05/107/applets/ascii.html

以下是我一直在尝试这一天(字面意思)并且不得不在互联网上搜索如何做到这一点,因为但是因为我的Java知识不那么好我无法理解(在今天开始我不知道任何关于数组的事情)我需要的只是一些帮助或推动正确的方向。

[编辑]抱歉忘了指出这个问题。我遇到的问题不是转换和加密PlainText,而是尝试将编码的消息(当然用我的程序加密)转换为PlainText(即我不能只用我的程序中的变量来反转它我实际上必须能够阅读并解码它)

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);
    }
}

3 个答案:

答案 0 :(得分: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");
}

感谢所有帮助人员比我想象的要简单得多。

答案 1 :(得分:0)

您的加密似乎只是将消息的每个字符移动一个给定的值。

 int letterCiphered= (letter-key2);

要解密此类消息,您应该将密码的每个字符移动相同的值,但是在另一个方向上。

 int letter= (letterCiphered+key2);

您在代码中拥有的解密功能完全不同。

在评论后更新:

如果我理解正确,你想将一串ascii值转换为它们代表的文本。

要解析输入字符串,如果它是一种简单的格式,您可以使用String.split()读取它。
要将数字的文字表示转换为实际数字,您可以使用Integer.parseInt() 最后,要将整数ascii值转换为字符,您只需要转换char c = (char)97;

解析输入以识别每个ascii值,将每个值转换为整数并将其转换为字符,然后将字符串联为字符串。

答案 2 :(得分:-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 ENCRYPTED\n");
         }
        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 DECRYPTED\n");

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