我正在尝试创建一个执行仿射密码的小软件,这意味着K1和字母表中的字母数量(使用m表示这个数字)必须互质,即gcd(k1, m) == 1
.
基本上是这样的:
我有一个明文:嘿
我有 K1:7
我有 K2:5
数字格式的明文是: 8 5 25
8 - 从 h(字母表中的位置)和 ** 5 25** 到e和y相同
加密:7 13 18
这是公式:
k1 * 8 + k2 模 27 = 7
k1 * 5 + k2 模 27 = 13
k1 * 25 + k2 模 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