Java中的加密代码

时间:2012-03-24 16:19:35

标签: java encryption

我试图用java做一个Vigenere密码程序,我遇到了代码加密/解密部分的一些问题。我知道如何处理加密/解密,但我无法将其放入代码中。

让我先解释一下这个项目:

对于这个项目,我正在创建一个密码程序(Vigenere密码与凯撒密码不同,因为Vigenere允许密钥是一个单词而不仅仅是一个字母或数字),如果他/她想要,则首先提示用户加密或解密消息。一旦用户进行选择,程序就会提示用户输入“密钥”。密钥必须是小写,一个字,而不是符号或数字。然后程序将询问用户输入文件,其中包含用户想要解密或加密的消息。然后,程序提示用户输出文件名,并将解密/加密的消息存储在该文件中。

所以让我们说消息是“在567见面”,关键是猫,并且用户想要加密消息,输出最终应该像“Oexl ct 567”

我的代码的encryptLine / decryptLine方法只需要加密/解密一行文本。我的代码的其他部分将处理其他行。对于我到目前为止所做的代码,decryptLine是完全错误的,现在,我只想关注encryptLine。一旦我弄清楚了,找出解密线应该不会那么难。在下面,我在我的encryptLine方法中发布了关于我想要做什么的评论。加密有效,遇到空格或符号时会遇到麻烦,例如?&%$。我知道它有很多冗余的代码,但这是我能想到的最好的东西,因为我是新手。

提前感谢您的帮助!!!

1 个答案:

答案 0 :(得分:1)

问题在于,当您在i内处理位置line时,您希望能够根据keyi内计算位置。这是有道理的 - key.charAt(i%(key.length()+1))几乎是正确的(尽管它实际上必须是key.charAt(i%key.length()),而不是+1,因为key中的有效位置的范围是0 } key.length()-1) - 但它对你不起作用,因为你希望某些字符不“计数”,也就是说,你不希望它们“用尽”{{1}中的一个字符}}。因此,您在key内的位置实际上与key有些独立,因为它还取决于您在i中看到的字符类型。

所以你真正需要的是在line内建立一个完全独立的索引j。每次处理来自key的信件时,都会增加line。然后,您可以使用模数方法,然后编写j,或者只要key.charAt(j%key.length())每次j重置0,就可以重置key.length()