我正在尝试一个简单的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.
答案 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');
}