Java:用于加密的更轻代码

标签 java swing encryption

我正在尝试获取一个程序来使用 Cesar 的 Cypher 加密消息,这涉及用字母替换字符串的每个字符,其代码是替换字母的代码加 3。例如,如果字母是A,那么就得换成D,因为D的代码是A的代码加3,字母是区分大小写的。我想到的代码使用了一个非常繁重的 switch 结构,我想知道你是否可以帮助我让它更直接。

这是我用于加密方法的代码:

public class Util 
{   

  public static String Encript(String stringa)

  {

        char[] stringaArray=stringa.toCharArray();


    for (int i =0; i<stringaArray.length; i++)
    {
        switch (stringaArray[i])
        {
                case 'a':
                        stringaArray[i]=('D');
                        break;
                case 'b':
                    stringaArray[i]='E';
                    break;
                case 'c':
                    stringaArray[i]='F';
                case 'd':
                    stringaArray[i]='G';
                    break;
                case 'e':
                    stringaArray[i]='H';
                    break;
                case 'f':
                    stringaArray[i]='I';
                    break;
                case 'g':
                    stringaArray[i]='J';
                    break;
                case 'h':
                    stringaArray[i]='K';
                    break;
                case 'i':
                    stringaArray[i]='L';
                    break;
                case 'j':
                    stringaArray[i]='M';
                    break;
                case 'k':
                    stringaArray[i]='N';
                    break;
                case 'l':
                    stringaArray[i]='O';
                    break;
                case 'm':
                    stringaArray[i]='P';
                    break;
                case 'n':
                    stringaArray[i]='Q';
                    break;
                case 'o':
                    stringaArray[i]='R';
                    break;
                case 'p':
                    stringaArray[i]='S';
                    break;
                case 'q':
                    stringaArray[i]='T';
                    break;
                case 'r':
                    stringaArray[i]='U';
                    break;
                case 's':
                    stringaArray[i]='V';
                    break;
                case 't':
                    stringaArray[i]='W';
                    break;
                case 'u':
                    stringaArray[i]='X';
                    break;
                case 'v':
                    stringaArray[i]='Y';
                    break;
                case 'w':
                    stringaArray[i]='Z';
                    break;
                case 'x':
                    stringaArray[i]='A';
                    break;
                case 'y':
                    stringaArray[i]='B';
                    break;
                case 'z':
                    stringaArray[i]='C';
                    break;

        }

  }
    String encripted= new String(stringaArray);
    return encripted;


 }

}

然后我在图形界面类中使用这个方法,这样当一个按钮被按下时它就会起作用:

 private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
    String stringa=messageTxt.getText();

    encriptedTxt.setText(Util.Encript(stringa, encriptedTxt));


}            

这是一个测试用例的例子:

Test case:
aBxyE    //Input
dEabH    //Output

提前致谢!

最佳答案

库尔/#Zruog

您可以遍历 String 中的字符,我还会传入 key 偏移量。创建一个 StringBuilder 并在执行整数加法和强制转换后追加每个字符。类似的东西,

public static String encrypt(String msg, int key) {
    StringBuilder sb = new StringBuilder();
    for (char ch : msg.toCharArray()) {
        char c = (char) (ch + key);
        sb.append(c);
    }
    return sb.toString();
}

用凯撒密码解密很简单;您可以使用 key

的负值调用 encrypt
public static String decrypt(String msg, int key) {
    return encrypt(msg, -key);
}

我用

测试了我的例子
public static void main(String[] args) {
    String msg = encrypt("Hello, World", 3);
    System.out.println(msg);
    System.out.println(decrypt(msg, 3));
}

最后,正如其他人指出的那样,凯撒密码非常不安全(因为字母频率 不是扰动,在现代意义上它是微不足道的)。

关于Java:用于加密的更轻代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38299018/

相关文章:

java - 从 Jquery 调用 Bean 方法

java - 哪里有示例 JAX-RS 客户端示例?

另一个类中的 Java ActionListener

encryption - 我是否需要加盐已使用 scrypt 散列的密码?

security - nginx auth_basic 是否发送明文密码?

git - Git-encrypt 中的错误加密实践?

java - 如何手动填写国外 Collection

java - 从批处理文件中一一运行多个 jar 文件

java - 从 JDialog 获取一个值给父 JFrame

java - 如何将图像包含到可执行的 .jar 中?