Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用数组的Vignere密码加密/解密_Java_Arrays_Encryption_Caesar Cipher_Vigenere - Fatal编程技术网

Java 使用数组的Vignere密码加密/解密

Java 使用数组的Vignere密码加密/解密,java,arrays,encryption,caesar-cipher,vigenere,Java,Arrays,Encryption,Caesar Cipher,Vigenere,我需要首先使用Vigener密码对消息进行加密,然后解密。这就是它应该如何工作 example message: "c a t s _ d o g s" keyword "rats": r a t s r a t s r order of the letter in the message (s

我需要首先使用Vigener密码对消息进行加密,然后解密。这就是它应该如何工作

example message:                                 "c  a  t  s  _  d  o  g  s"
keyword "rats":                                   r  a  t  s  r  a  t  s  r
order of the letter in the message (start at a=0):2  0  19 18 () 3  14 6  18
order of the letter in the keyword:               17 0  19 18 17 0  19 18 17
sum of the two orders:                            19 0  38 36 17 3  39 24 35
new letter for the message*                       t  a  m  k     d  h  y  j
encrypted message = "tamk uoyk"
注:如果
sum>26
,则我们从
sum
中减去
26
,得到循环字母表。例如:

z + b = 25 + 1 = 26; 26 - 26 = 0 --> a
我已经编写了获取关键字数值的方法,还有两个“加”或“减”单个字母的方法,以及两个执行caesar编码/解码的方法(简单地将整个消息在字母表中向右移动一个int,或向左移动进行解密)

我真正需要帮助的部分是如何创建一个for循环,该循环将重复关键字适当的次数(与消息长度相同),并继续使用ActainKeys方法获取重复键的数值

这是我的全部计划;我正在挣扎的部分在结尾(Q2f)

导入java.util.array;
公共类密码{
公共静态void main(字符串[]args){
System.out.println(charRightShift('z',3));
System.out.println(charLeftShift('z',3));
字符串测试=凯撒编码(“猫和狗”,5);
系统输出打印LN(测试);
系统输出打印LN(caesarDecode(测试,5));
获取密钥(“abcxyz”);
System.out.println(VigeneenCode(“大象”、“老鼠”);
}
//Q2a-b
//字符移位的广义方法
公共静态字符charShift(字符c,int n){
//n的值应介于0和25之间
if(数学abs(n)<0 | | 25抛出新的IllegalArgumentException(“n必须是0而不是重复关键字,直到它是消息的长度,您可以使用模数逻辑找到需要哪个字母。对于消息中的任何位置
n
,关键字字母是
关键字[n%keyword.length()]

您可以使用mod操作
%
来完成此操作

char[] messageArray = message.toCharArray();
char[] encryptedMessage = new char[messageArray.length];
int[] numKeyword = obtainKeys(keyword);
int keywordLength = numKeyword.length;

for(int i=0; i<message.length(); i++){
    int shiftAmount = numKeyword[i % keywordLength];
    char c = messageArray[i];
    c = charRightShift(c,shiftAmount);
    encryptedMessage[i] = c;
} 
char[]messageArray=message.toCharArray();
char[]encryptedMessage=新字符[messageArray.length];
int[]numKeyword=获取键(关键字);
int关键字长度=numKeyword.length;

对于(int i=0;我非常感谢!!您的代码结构非常简单,它完全符合我的要求:)“小写拉丁字母”应该是“小写”谢谢您的反馈!我不知道有什么区别,但会去查阅。