【发布时间】:2013-10-30 09:05:30
【问题描述】:
我正在尝试创建一个执行仿射密码的小软件,这意味着 K1 和字母表中的字母数量(使用 m 表示这个数字)必须互质,即gcd(k1, m) == 1。
基本上是这样的:
我有一个明文:嘿
我有 K1:7
我有 K2:5
数字格式的明文是: 8 5 25
8 - 来自 h(字母表中的位置)和 ** e 和 y
5 25** 相同加密:7 13 18
公式是:
k1 * 8 + k2 mod 27 = 7
k1 * 5 + k2 mod 27 = 13
k1 * 25 + k2 mod 27 = 18
我有一个可以加密的函数,但我不知道如何解密。
例如我有 7 代表 h。我想再次找回数字 8,知道 7、k1 和 k2。
你们有什么想法吗?
你输入 k1、k2、结果的一些函数(例如 7,对于 h),它给了我 8,但我真的不知道如何反转这个。
加密函数是这样的:
public List<int> get_crypted_char(string[] strr)
{
List<int> l = new List<int>();
int i;
for (i = 0; i < strr.Length; i++)
{
int ch = int.Parse(strr[i]);
int numberback = k1 * ch + 5;
numberback = (numberback % 27);
l.Add(numberback);
}
return l;
}
其中:string[] strr 是一个包含明文的字符串。 函数示例: get_crypted_char({"e","c","b"})
结果将是这样的列表 {"5","3","2"}
更新: 这是来自维基百科的关于这种加密和解密的链接,但是......我真的不明白“如何” http://en.wikipedia.org/wiki/Affine_cipher
【问题讨论】:
-
你的问题不清楚 IMO..
-
你有加密代码吗?我认为它更容易阅读。
-
过去有人问过并回答过:stackoverflow.com/a/10133236/146205。没有真正的方法可以取回它,例如
8 mod 3和5 mod 3都等于2。 -
知道 mod 操作的结果并不能帮助您找到操作数。例如
61 mod 27 = 7,还有34 mod 27 = 7,甚至7 mod 27 = 7。那么你怎么知道无数种可能性中的哪一种是正确的呢? -
链接有解密算法。为什么要使用 27?