考虑到位置的替代密码

时间:2014-02-05 13:32:42

标签: c# encryption

我正在开展一个项目,我将根据加密文本向用户显示一些信息。

我已经知道了这个密码,意思是,我知道如何破解密码。我知道简单的替换密码,但在这种情况下,这个密码不会起作用。

我的代码只包含数字0-9,重复次数为0-10。所以基本上是一个0-10个字符的代码,只包含数字。然后,此代码通过密码运行,并转换为大写字母,非大写字母和数字的混合。

很简单,我可能会写一个dechiperer来将其转换回数字。但这也考虑了代码中数字的位置。

含义:代码:1234可以转换为Ar5Q但代码:4321可以转换为B6up而不是:Q5rA正如您对简单替换密码所期望的那样。

有人能指出我如何创建这样一个密码的方向吗?

还有一个奖金问题。是否可以从表格或字典中生成dechiperer?

编辑:

我有这张桌子:

enter image description here

代码:1234将成为:H8o6

H8o6是我收到并解码的字符串。

我通过创建字典来解决这个问题

Dictionary<KeyValuePair<string, int>, int> translator = new Dictionary<KeyValuePair<string, int>, int>();

我在字典中添加了所有条目:

translator.Add(new KeyValuePair<string, int>("N", 0), 0);
        translator.Add(new KeyValuePair<string, int>("H", 0), 1);
        translator.Add(new KeyValuePair<string, int>("r", 0), 2);
        translator.Add(new KeyValuePair<string, int>("x", 0), 3);
        translator.Add(new KeyValuePair<string, int>("Y", 0), 4);
        translator.Add(new KeyValuePair<string, int>("e", 0), 5);
        translator.Add(new KeyValuePair<string, int>("z", 0), 6);
        translator.Add(new KeyValuePair<string, int>("t", 0), 7);
        translator.Add(new KeyValuePair<string, int>("L", 0), 8);
        translator.Add(new KeyValuePair<string, int>("l", 0), 9);
        translator.Add(new KeyValuePair<string, int>("t", 1), 0);
        translator.Add(new KeyValuePair<string, int>("I", 1), 1);
        translator.Add(new KeyValuePair<string, int>("8", 1), 2);
        translator.Add(new KeyValuePair<string, int>("r", 1), 3);
        translator.Add(new KeyValuePair<string, int>("X", 1), 4);
        translator.Add(new KeyValuePair<string, int>("K", 1), 5);

这感觉非常无效。但我无法理解如何做到这一点。

Marked Matts的回答。但我实际上在寻找的是我得到的评论: - )

1 个答案:

答案 0 :(得分:0)

所以,如果我正确地理解了这一点,你就会有这样的事情:

char[] cipher = ['A','r','5','Q','T','g','6','7','u']

你正在编码这样的数字列表:

int[] msg = [1,2,3,4];

做这样的事情:

encoded[i] = cipher[msg[i]-1];

换句话说,您使用msg中的数字作为密码的索引。

因此,如果您想为其添加位置,只需添加位置并对其进行修改(以使其保持在范围内)。类似的东西:

encoded[i] = cipher[(msg[i] - 1 + i) % cipher.length];

所以现在你编码的信息就是(如果我没有把它弄乱 - 我正在脑子里这样做):

A 5 T 6

现在,如果您的想法是为字符串中的每个位置提供完全独立的密码,那么我认为您最好的选择是拥有2D数组。像(缩短为2个字符的理智):

char[,] cipher = {
    { 'A', 'N' },
    { 'C', '2' },
    { 'a', 'E' }
}

然后你会像这样对它进行索引:

encoded[i] = cipher[i,msg[i]-1];

当然,现在您需要确保数组的维度消息长度x消息字符范围