Java 如何用空格解密短语
所以我一直在做一个加密和解密程序,尽管我在解密方面遇到了麻烦。我以为你只需要在解密部分更改一些值,但那不起作用。此外,我一直在尝试在加密和解密过程中添加空白(空格)。目前,它用随机字母替换空格。我以为只要在下面的字符数组中添加一个空格就可以解决这个问题,但事实并非如此 如果有人能给我一些建议来解决我的两个问题,那就太棒了Java 如何用空格解密短语,java,encryption,whitespace,caesar-cipher,Java,Encryption,Whitespace,Caesar Cipher,所以我一直在做一个加密和解密程序,尽管我在解密方面遇到了麻烦。我以为你只需要在解密部分更改一些值,但那不起作用。此外,我一直在尝试在加密和解密过程中添加空白(空格)。目前,它用随机字母替换空格。我以为只要在下面的字符数组中添加一个空格就可以解决这个问题,但事实并非如此 如果有人能给我一些建议来解决我的两个问题,那就太棒了 class EncyptionandDecryption { char[] aEnc; char[] aDec; int shift; char[] alphabet; pu
class EncyptionandDecryption
{
char[] aEnc;
char[] aDec;
int shift;
char[] alphabet;
public EncyptionandDecryption(int c)
{
aEnc = new char[]{'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'};
aDec = new char[]{' ','z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};
shift = c;
}
public String Encryption(String phrase)
{
String enc = "";
for (int i = 0; i < phrase.length(); i++)
{
char p = (char) (phrase.charAt(i) - 97);
char e = (char) (((p + shift) % 26) + 97);
enc += e;
}
return enc;
}
public String Decryption(String message)
{
String dec = "";
for (int i = 0; i < message.length(); i++)
{
char z = (char) (message.charAt(i) - 97);
char p = (char) (((z - shift) % 26) + 97);
dec += p;
}
return dec;
}
}
类的加密和解密
{
char[]aEnc;
char[]aDec;
int移位;
字符[]字母表;
公共加密和解密(INTC)
{
aEnc=新字符[]{'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'};
aDec=新字符[]{'、'z'、'y'、'x'、'w'、'v'、'u'、't'、's'、'r'、'q'、'p'、'o'、'n'、'm'、'l'、'k'、'j'、'i'、'h'、'g'、'f'、'e'、'd'、'c'、'b'、'a'};
移位=c;
}
公共字符串加密(字符串短语)
{
字符串enc=“”;
for(int i=0;i
我建议使用标准化加密(我相信您有理由不使用),或者使用查找表(您似乎计划这样做)。如果您对查找表逻辑有问题,如果您愿意,我可以提供一些代码。这些是更简单的答案
但是,始终可以为空间创建特殊情况。如果我没记错的话,它们的十六进制值是0x20
根据请求,下面是一个查找表的C#示例。它不完美,实际使用需要大量修改(目前它不支持大写或数字等),但我希望它能传达这一信息。事实证明,转换为Java也不难
class Crypto
{
char[] mTable;
char[] mReverseTable;
public Crypto()
{
mTable = new char[255];
mReverseTable = new char[255];
List<char> lazy = new List<char>();
Random r = new Random(123);//I'm not hardcoding a lookup table, but using a random with a predictable seed is a good alternative
for (int i = (int)'a'; i <= (int)'z'; i++)
{
lazy.Add((char)i);
}
for (int i = (int)'a'; i <= (int)'z'; i++)
{
int index = r.Next(0, lazy.Count);
mTable[i] = lazy[index];
lazy.RemoveAt(index);
}
mTable[(int)']'] = ' ';//completely arbitrary to use ], but here we hardcode the value. there's a better way to do this using the random method above.
mTable[(int)' '] = ']';
for (int i = 0; i < mTable.Length; i++)
{
if (mTable[i] != '\0')
{
mReverseTable[mTable[i]] = (char)i;
}
}
}
public String Encrypt(string phrase)
{
String enc = "";
for (int i = 0; i < phrase.Length; i++)
{
enc += mTable[phrase[i]];
}
return enc;
}
public String Decrypt(string phrase)
{
String enc = "";
for (int i = 0; i < phrase.Length; i++)
{
enc += mReverseTable[phrase[i]];
}
return enc;
}
}
类加密
{
char[]mTable;
char[]mReverseTable;
公开密码
{
mTable=新字符[255];
mReverseTable=新字符[255];
List lazy=新列表();
Random r=new Random(123);//我不是在硬编码查找表,但是使用带有可预测种子的随机数是一个不错的选择
对于(int i=(int)'a';i为什么空间是“加密的”与其他字符有什么不同吗?您的aEnc
和aDec
数组实际上没有用于任何用途。您是否打算让您的程序将它们用作查找表,而不是使用加法和模?是的,我确实打算将它们用作查找表。我还以为空格是加密的,与任何其他字符一样。我假设这是java,所以我添加了标记。如果不是,请将您的问题包含在正确的语言标记中。您对问题的描述不是很清楚。您能否改进您的问题并改进您的前几段,以准确描述问题所在?我不介意查看您的代码以获得帮助。我将尝试使用空间也是十六进制值。太棒了,谢谢你的帮助!我一会儿就试试。