如何创建替换关键字密码

时间:2014-04-24 11:28:03

标签: java encryption keyword substitution

我正在尝试开发一个替代密码,它使用关键字来创建一个新的密码字母表。我是Java新手(因为我确定你能说出来!)而且我找到了它 很难围绕代码包围我需要做的事情。

我的理解如下:

例如,如果关键字是javben,我应该首先找到" j"的索引。在plainText字符串数组中,它是9.然后我想将plainText [9]移动到cipherText [0]并将每个其他元素移动1.这样第一次传递将导致:

cipherText[] = {"j","a","b","c","d","e","f","g","h","i","k","l","m","n","o","p","q","r","s","t","u","v","w","r","x","y","z"}

然后我会找到" a"并且它已经应该在哪里,所以我需要考虑到这一点,而不是转移它 - 不知何故。下一个字符是" v"所以这个过程会继续下去。

在将所有内容转移到密码后,我应该最终得到:

plainText []= {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","r","x","y","z"}
cipherText[]= {"j","a","v","b","e","n","c","d","f","g","h","i","k","l","m","o","p","q","r","s","t","u","w","r","x","y","z"}

正如你所看到的,我有理由相信我理解了要经历的过程,但是我真的很难理解为此所需的代码。请帮忙!

import java.util.Scanner;
import java.io.*;
/**
* This program uses a keyword for a simple substitution cipher.
* 
* @author Bryan
* @version Programming Project
*/

public class Cipher
{
// The main method removes duplicate characters in a word input by the user.
public static void main(String[] args) throws IOException
{
    // Creatae a new scanner object for keyboard input
    Scanner keyboard = new Scanner(System.in);

    // prompt the user to enter a word
    System.out.println("Please enter your keyword: ");
    // and get their input
    String input = keyboard.nextLine();
    // the keyword will be built up here
    String keyword = "";

    while(input.length() > 0) 
    {
        // get the first letter
        char letter = input.charAt(0);
        // if the letter is not already in the output
        if (keyword.indexOf(letter) == -1)
        {
            // add it to the end
            keyword = keyword + letter;
        }

        // that letter is processed : discard it
        input = input.substring(1);
    }

    //this is just to confirm the duplicate letters in the keyword are removed
    System.out.println(keyword); 
    getFile();

}

/**
 * This asks the user to specify a filename which is then 
 * read into the program for enciphering
 */

public static void getFile()throws IOException
{
    // Creatae a new scanner object for keyboard input
    Scanner keyboard = new Scanner(System.in);

    // Get the file name
    System.out.println("Enter the file name: ");
    String filename = keyboard.nextLine();

    //Open the file
    File file = new File(filename);
    Scanner inputFile = new Scanner(file);

    // Read the lines from the file until no more are left
    while (inputFile.hasNext())
    {
        //Read the next line
        String allText = inputFile.nextLine();

        // Display the text
        System.out.println(allText);
    }




    //Close the file
    inputFile.close();

}

public static void alphabet()
{
    String[] plainText =     {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    String[] cipherText = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
}
}

3 个答案:

答案 0 :(得分:1)

这个很简单,只需设置一个函数,对于关键字中的每个字母,它只是将它从字母数组中取出,然后将两个数组与开头的字母数组和字母表一起添加之后的那些字母。 E.g:

String[] cipherKeyWord(String keyWord, String[] alphabet){
    ArrayList<String> finalCipher = (ArrayList) Arrays.asList(keyWord.split("(?!^)")); 
    //^ This splits it into a string of every word using regular expressions

    ArrayList<String> newAlphabet = (ArrayList) Arrays.asList(alphabet);

    newAlphabet.removeAll(finalCipher);

    finalCipher.addAll(newAlphabet);

    return finalCipher.toArray(new String[finalCipher.size()]);
}

答案 1 :(得分:1)

package Classes;

public class SubstitutionCipherClass {

    public static void main(String[] args) {
        char plainText[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'r', 'x', 'y', 'z'};
        char cipherText[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'r', 'x', 'y', 'z'};

        String pt = "haci";

        for (int a = 0; a < pt.length(); a++) {
            for (int i = 0; i < plainText.length; i++) {
               if(plainText[i] == (pt.charAt(a))){
                   System.out.println(cipherText[i]);
               }
            }
        }
    }
}

答案 2 :(得分:0)

我使用以下代码

完成了替换密码
import java.util.*;

class SubCipher
{

public static void main(String args[])
{
     String plainText = ",.<>;':\"[]{}-=_+)(*&^%$#\"@!),998683,1,x3x33,10~1,1,10~2,2,20";
    String strcipherText = Encrypt(plainText);
    String strdecryptedText = Decrypt(strcipherText);

System.out.println("Plain Text :"+plainText);
System.out.println("Encrypted Text :"+strcipherText);
System.out.println("Decrypted Text :"+strdecryptedText);     
}

private static String Encrypt(String text)
{
    byte[] textBytes = text.getBytes();
    for (int i = 0; i < textBytes.length; i++)
    {
        int currentByteValue = (int)textBytes[i];
        textBytes[i] = (byte)(currentByteValue > 255 ? currentByteValue - 255 + 2 : currentByteValue + 2);
    }
    String strbyte=new String(textBytes);
    return  strbyte;
}

private static String Decrypt(String text)
{
    byte[] textBytes = text.getBytes();
    for (int i = 0; i < textBytes.length; i++)
    {
        int currentByteValue = (int)textBytes[i];
        textBytes[i] = (byte)(currentByteValue < 0 ? currentByteValue + 255 - 2 : currentByteValue - 2);
    }
    String strbyte=new String(textBytes);
    return strbyte;
   }
}