0

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

Key =ABC 密文由PT和key相加得到

纯文本:WEWILLATTACKTONIGHT

键:ABCABCABCABCABCABCA

密码:WFYIMNAUVADMTPPIHJT

我怎样才能重复纯文本长度的密钥,然后在读取它时对其进行加密。?

使用以下代码段从文件中读取输入

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.
4

1 回答 1

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');
}
于 2014-11-23T06:22:56.407 回答