Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 - Fatal编程技术网

Java 如何更改加密代码,使其只加密给定字符串,而不加密以前加密的内容?

Java 如何更改加密代码,使其只加密给定字符串,而不加密以前加密的内容?,java,Java,我的代码对输入句子中先前加密的短语进行加密。我希望它只加密原始字符串中的字母v、m、g和b,而不是之前加密的字母(如果有意义的话)。因此,使用诸如“非常好”之类的字符串,它会将字母v加密为正确的短语,但随后会在加密的短语中找到字母“b”,然后进一步加密,这是我不想要的。很明显,解密也不起作用,因为它需要特定的短语将其转换回正确的字母,但它不能,因为该短语的加密程度甚至超过了它应该的程度 我试着改变字母先被加密的顺序,希望它能避免冲突,但这根本不起作用 加密类 测试级 我所期望的是,如果你输入“非

我的代码对输入句子中先前加密的短语进行加密。我希望它只加密原始字符串中的字母v、m、g和b,而不是之前加密的字母(如果有意义的话)。因此,使用诸如“非常好”之类的字符串,它会将字母v加密为正确的短语,但随后会在加密的短语中找到字母“b”,然后进一步加密,这是我不想要的。很明显,解密也不起作用,因为它需要特定的短语将其转换回正确的字母,但它不能,因为该短语的加密程度甚至超过了它应该的程度

我试着改变字母先被加密的顺序,希望它能避免冲突,但这根本不起作用

加密类

测试级

我所期望的是,如果你输入“非常好”,加密的句子将是“ag',rery jeb..wood”,而解密的句子将是“非常好”


但是,我得到了“ajedug>?/…w',rery jedug>?/…wood”作为加密,以及“ajeB..w',rery jeB..wood”作为解密,使用相同的“非常好”

您的加密方法无法满足您的需求。您希望修改影响原始字符串。然而,你的循序渐进的方法意味着你得到了一些不同的东西。让我们考虑一下前两个变化:

Very good
变成

ag',rery good
基于替换
v
v
的第一对规则

因此
encrypt2
具有此值,然后您将下一对规则应用于替换
g
g
此值。这会替换第一个
g
,它不是来自原始字符串,而是由第一步添加的。因此,
encrypt5
具有以下值:

ajeb..w',rery good
您的加密将以这种方式继续,并得到不希望得到的结果

您可能希望在原始字符串上尝试一个循环。比如:

public String encrypt(String sntnc) {
    StringBuilder encryptdSntnc = new StringBuilder();
    for (char c : sntnc.toCharArray()) {
        c = Character.toLowerCase(c);
        switch (c) {
            case 'v' :
                encryptdSntnc.append("ag',r");
                break;
            case 'm' :
                encryptdSntnc.append("ssad");
                break;
            case 'g' :
                encryptdSntnc.append("jeb..w");
                break;
            case 'b' :
                encryptdSntnc.append("dug>?/");
                break;
            default :
                encryptdSntnc.append(c);
                break;
        }
    }
    return encryptdSntnc.toString();
}

解密将更加复杂,因为您需要匹配字符串并用字符替换它们。然而,使用循环的类似方法应该是可能的。您可以搜索可以由字符替换的每个字符串,而不是
开关
语句。

您是否尝试了循环而不是字符串。替换?不,我实际上没有。我该怎么做呢?
ajeb..w',rery good
public String encrypt(String sntnc) {
    StringBuilder encryptdSntnc = new StringBuilder();
    for (char c : sntnc.toCharArray()) {
        c = Character.toLowerCase(c);
        switch (c) {
            case 'v' :
                encryptdSntnc.append("ag',r");
                break;
            case 'm' :
                encryptdSntnc.append("ssad");
                break;
            case 'g' :
                encryptdSntnc.append("jeb..w");
                break;
            case 'b' :
                encryptdSntnc.append("dug>?/");
                break;
            default :
                encryptdSntnc.append(c);
                break;
        }
    }
    return encryptdSntnc.toString();
}