Java 使用数组的Vignere密码加密/解密
我需要首先使用Vigener密码对消息进行加密,然后解密。这就是它应该如何工作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
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;我非常感谢!!您的代码结构非常简单,它完全符合我的要求:)“小写拉丁字母”应该是“小写”谢谢您的反馈!我不知道有什么区别,但会去查阅。