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,所以我添加了标记。如果不是,请将您的问题包含在正确的语言标记中。您对问题的描述不是很清楚。您能否改进您的问题并改进您的前几段,以准确描述问题所在?我不介意查看您的代码以获得帮助。我将尝试使用空间也是十六进制值。太棒了,谢谢你的帮助!我一会儿就试试。