使用Vigenere密码加密,从文件中读取纯文本(JAVA)

时间:2014-11-15 15:50:33

标签: java vigenere

我正在尝试一个简单的Vigenere密码,从文件中读取纯文本并使用密钥加密。

Key = ABC 通过在PT和密钥之间添加来获得密文

纯文本:W E W I L L A T T A C K T O N I G H T

关键:A B C A B C A B C A B C A B C A B C A

密码:W F Y I M N A U V A D M T P P I H J T

如何重复纯文本长度的密钥,然后在阅读时对其进行加密。

使用以下代码段

从文件中读取输入
FileInputStream fileInput = new FileInputStream("/Documents/file1.txt");

    int r;
    int count = 0 ;


    //Read each character from the file one by one till EOF
    while ((r = fileInput.read()) != -1) 
    {
        char c = (char) r; 
      //SOMETHING NEEDS TO BE DONE HERE
    System.out.print(c); 
    count ++; //Keeps count of the number of characters in the plain text.

1 个答案:

答案 0 :(得分:0)

public static void encrypt (String a)throws IOException 
{

    //Array of the length of the Plain Text is created
    char pt[] = new char[count];

    //File is opened again and this time passed into the plain text array 
    FileInputStream f = new FileInputStream("/Users/avtrulzz/Documents/file1.txt") ;

    int s ;

    int i = 0 ;

    while((s = f.read()) != -1)

    {
    //Every character read is simultaneously fed into the array
        pt[i] = (char) s ;
            i ++ ;
    }

    //Find the length of the key
    int kl = a.length() ;
    //Find how many times the key has to be repeated
    int keyrep = count / kl ;

    //Where keyrep is the number of times you want to repeat the string and a is the string  to repeat.
    String repeated = new String(new char[keyrep]).replace("\0", a);

    System.out.println("The key repeated till the length of the plain text");
    System.out.println();
    System.out.println(repeated);

    //The string "repeated" is made into an array "keyforpt"
    char keyforpt[] = repeated.toCharArray() ;


    char ct[] = new char[count] ;

    for(int ind = 0; ind < pt.length ; ind++)

    {
        ct[ind] = toChar((toInt(pt[ind]) + toInt(keyforpt[ind]) + 1) % 26);
    }

    System.out.println() ;
    for(int temp = 0;temp < ct.length;temp++)
        {

            System.out.print(ct[temp]) ;
        }
    System.out.println() ;
}


private static int toInt(char chr)
{
    return chr - 'a';
}

private static char toChar(int value) 
{
    return (char)(value + 'a');
}