使用从文件中读取明文的 Vigenere 密码进行加密 (JAVA)

Posted

技术标签:

【中文标题】使用从文件中读取明文的 Vigenere 密码进行加密 (JAVA)【英文标题】:Encrypting using Vigenere cipher where Plaintext is read from a file (JAVA) 【发布时间】:2014-11-15 15:50:32 【问题描述】:

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

键=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

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

使用以下 sn-p 从文件中读取输入

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.

【问题讨论】:

你试过什么?如果您手动解决此问题,您将如何解决? 我正在尝试按如下方式处理它:在读取时将纯文本保存在数组中...将密钥保存在相同大小的数组中并执行添加...。 好的,所以当您扫描明文时,您需要跟踪您在密钥中的位置,以及当您到达密钥时重新开始。这意味着维护两个索引,或者使用一个模密钥的长度。试着写“SOMETHING”,看看会发生什么,如果错了就改正直到它是对的。编程是调试一张白纸的艺术。 @keshlam :嘿,我找到了解决方案。看看 【参考方案1】:
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');

【讨论】:

以上是关于使用从文件中读取明文的 Vigenere 密码进行加密 (JAVA)的主要内容,如果未能解决你的问题,请参考以下文章

Vigenere Cipher使用命令行提示

Python 中的 Vigenere 密码

Python中的Vigenere密码不适用于大写/小写字母转换

C中Vigenere的密码移位问题

在 vigenere 密码中查找密钥的长度

古典密码-多表密码体制