Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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 加密加密的最佳方法是什么?_Java_Encryption_Vigenere - Fatal编程技术网

Java 加密加密的最佳方法是什么?

Java 加密加密的最佳方法是什么?,java,encryption,vigenere,Java,Encryption,Vigenere,对于我的CPSC类,我需要使用caesar密码生成加密代码。就这样了。下一部分是获取加密消息并循环将要添加到加密消息中的secretKey。例如,如果我使用13的移位来加密“Hello!”,它将变成“Uryyb!”。然后我必须把U移一,r移三,y移一,等等。。。这将包含在“Vuzbc!”中。我是一名初学者,所以我不知道所有很酷的技巧和窍门。我所知道的唯一可能的解决方案是获取凯撒密码的结果,并以某种方式索引要添加到结果中的密钥 以下是我目前掌握的代码: public class Cipher {

对于我的CPSC类,我需要使用caesar密码生成加密代码。就这样了。下一部分是获取加密消息并循环将要添加到加密消息中的secretKey。例如,如果我使用13的移位来加密“Hello!”,它将变成“Uryyb!”。然后我必须把U移一,r移三,y移一,等等。。。这将包含在“Vuzbc!”中。我是一名初学者,所以我不知道所有很酷的技巧和窍门。我所知道的唯一可能的解决方案是获取凯撒密码的结果,并以某种方式索引要添加到结果中的密钥

以下是我目前掌握的代码:

public class Cipher { 

private int secretKey;
private int superSecretKey;


public static void main(String [] args)
{ 
    Cipher cipher = new Cipher(1);
}

public Cipher(int myKey) { 
    secretKey = myKey;
}


public String caesarEncrpyt (String s) {
    String r = "";

    for(int i = 0; i < s.length(); i++) {

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) {
            if (Character.isUpperCase(c)) {
                r += (char) ('A' + (c - 'A' + secretKey) % 26);
            }
            else {
                r += (char) ('a' + (c - 'a' + secretKey) % 26);
            }
        }
            else {
            r += c;
        }
    }
    return r;
}

public String caesarDecrypt (String s) {
    String r = "";

    for(int i = 0; i < s.length(); i++) {

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) {
            if (Character.isUpperCase(c)) {
                r += (char) ('A' + (c - 'A' - secretKey) % 26);
            }
            else {
                r += (char) ('a' + (c - 'a' - secretKey) % 26);
            }
        }
            else {
            r += c;
        }
    }
    return r;
}

public String augustusEncrypt (String s) {
    String r = "";

    for(int i = 0; i < s.length(); i++) {

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) {
            if (Character.isUpperCase(c)) {
                r += (char) ('A' + (c - 'A' + secretKey) % 26);
            }
            else {
                r += (char) ('a' + (c - 'a' + secretKey) % 26);
            }
        }
            else {
            r += c;
        }
    }
    return r;
}
公共类密码{
私钥;
私钥;
公共静态void main(字符串[]args)
{ 
密码=新密码(1);
}
公共密码(int-myKey){
secretKey=myKey;
}
公共字符串CASEARENCRPYT(字符串s){
字符串r=“”;
对于(int i=0;i
Augustussencrypt是caesarEncrypt的复制和粘贴。我一直在移动一些东西,希望找到解决方案。提前感谢


编辑:我可能没有正确地解释这个问题,如果你有问题,我会在这里。

编写一个函数,调用它
toDigits
,它将接受一个整数(或一个长整数),并返回一个与输入数字对应的整数数组。toDigits(13)=>{1,3}和toDigits(4834)=>{4,8,3,4},等等

然后编写一个函数
encryptChar
,取一个字符和一个int,并用该int对字符进行加密。(encryptChar('e',1)=>'f',encryptChar('a',28)=>c,等等)

然后,您可以循环消息的字符和此数组中的数字,将值传递给encryptChar,并使用结果组装加密消息。在松散的伪代码中:

fn encryptMessage(message, key):
  key_array = toDigits(key)
  output = ""
  for i in length (message):
    output.append(encryptChar(message[i], key_array[i % length(key_array)]))

除了加密的最佳实践和约定之外,解决方案很简单

当我们跳出字母表时,字母A-Z和A-Z已经执行了正确的循环,并且您相信它工作正常。您需要做的就是在循环之前添加1

可能是这样的(警告:未测试):


一般来说,加密加密文本是一种不好的做法。它不太可能使任何东西更安全,而且取决于所使用的系统,实际上可能会使事情变得更弱。(显然,这与特定情况无关,尽管这种双重加密显然没有什么更安全的)当你说“循环密钥”时,你的意思是因为键是13,你要把它变成{1,3},如果键是482213,循环就是{4,8,2,2,1,3}?有点难以解释。如果我的secretKey是13,我必须旋转“Hello!”我会把1加到H,然后把3加到e。然后重复到1再加到L。
('A' + ((c+1) - 'A' + secretKey) % 26)