gpt4 book ai didi

java - 带有/模运算的凯撒密码

转载 作者:行者123 更新时间:2023-11-30 02:38:36 25 4
gpt4 key购买 nike

我这里有一个加法密码,可以强力测试固定密文的所有可能排列。它的功能很好,但我一生都无法弄清楚如何实现模运算和解密公式。 p = ((c - key) % 26) 其中 p 是明文值,c 是字母数组中的密文(即 A = 0、B=1 等)

这是代码

public class Problem1 {

public static void main(String[] args) {

String guess = "";

String ct = "UOISCXEWLOBDOX"; // ciphertext
int key;// key to test
char ch;
for (key = 0; key < 26; key++) { // for each key value
for (int i = 0; i < ct.length(); ++i) { // test char
ch = ct.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
ch = (char) (ch - key);
if (ch < 'A') {
ch = (char) (ch + 'Z' - 'A' + 1);
}
guess += ch;
} else {
guess += ch;
}
}

System.out.println("key: " + key + " " + "Decrypted Message = " + guess);
guess = "";
}
}

}// main

这是模数算术的更新代码

import java.util.*;
import java.io.*;
`public class AdditiveCipher {

public static void main(String[] args)
{

String guess = "";
//char pt = 'a';
String cipherText = "UOISCXEWLOBDOX";
int key,i,x = 0;

//array of characters we can use
char[] alphabet = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z'};

//try each key on the cipher text
for(key = 0; key < 26; key++)//for each key
{
for( i = 0; i < cipherText.length(); i++)//for each letter
{
int pt = (cipherText.charAt(i) - key - 'A') % 26;
guess += (char)pt;
}
System.out.print(guess + "\n"); //display each guess
guess = "";
}//outer for
}//end main
}//end AdditiveCipher.java`

这是我在尝试了一段时间后的最新尝试,它输出了大量的盒子。任何逻辑方面的帮助将不胜感激,或者只是告诉我我做错了什么

最佳答案

这种模数解密方法的实现相当简单,并且完全按照您在问题中描述的方式完成。您所要做的就是按照您的描述创建字符数组 (A = 0, B = 1, ...),然后进行转换 p = ((c - key) %26) 对每个字符查找原文。至少,在理想世界中它是这样运作的。我敢打赌您遇到的麻烦是字符的 ASCII 值。如您所见here ,值'A'等于整数65,并且大写字母的值从那里开始增加。为了弥补这一点,请在执行模除法之前添加 13(或 'A',如 'A' % 26 = 13)(如下所示:p = ((c - key + 13) % 26)),你应该可以开始了。需要明确的是,p 是字符数组中存储该字符的原始文本值的位置,而不是解密字符的实际整数值。我希望这对您有所帮助,祝您实现顺利!

关于java - 带有/模运算的凯撒密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42405744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com