我正在开展一个项目,我将根据加密文本向用户显示一些信息。
我已经知道了这个密码,意思是,我知道如何破解密码。我知道简单的替换密码,但在这种情况下,这个密码不会起作用。
我的代码只包含数字0-9,重复次数为0-10。所以基本上是一个0-10个字符的代码,只包含数字。然后,此代码通过密码运行,并转换为大写字母,非大写字母和数字的混合。
很简单,我可能会写一个dechiperer来将其转换回数字。但这也考虑了代码中数字的位置。
含义:代码:1234可以转换为Ar5Q但代码:4321可以转换为B6up而不是:Q5rA正如您对简单替换密码所期望的那样。
有人能指出我如何创建这样一个密码的方向吗?
还有一个奖金问题。是否可以从表格或字典中生成dechiperer?
编辑:
我有这张桌子:
代码: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的回答。但我实际上在寻找的是我得到的评论: - )
答案 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消息字符范围