英文字母26个,26有一个非常好的特点,它是27-1,是素数的幂减1。这意味着,特征为3的27阶域的乘法群就是26阶的。至于零元(加法单位元),可以代表空格或一切分隔符,解密时零元一律翻译成空格,能从只有A~Z和空格的文本中看出意思就好。
将幺元(乘法单位元)记作A,将满足x^3-x+1=0的乘法群生成元记作B,将B的0~25次方分别记作A~Z。这样,ROT13就正好相当于相反数(乘以负一)。维吉尼亚密码,本质上就是这个域上的乘除法。
下面是将27个字符表示为A、B、C(即1、B、B^2)的线性组合的查询表。
空格=0 A=1 N=-1
B=B J=B+A D=B-A
O=-B Q=-B+A W=-B-A
C=B^2 V=C+A M=C-A
K=C+B G=C+B+A L=C+B-A
E=C-B S=C-B+A H=C-B-A
P=-B^2 Z=-C+A I=-C-A
R=-C+B U=-C+B+A F=-C+B-A
X=-C-B Y=-C-B+A T=-C-B-A
如此这般,明文和密钥之间的运算便可不拘泥于普通的乘法,而是可以使用加法复杂的二元多项式来计算出密文了,只要求给定一个合法的密钥字符时,明文字符和密文字符可以一一对应即可。密钥甚至可以使用空格。(普通维吉尼亚的密钥中,空格不合法,因为无法除以0,而扩展维吉尼亚也可能存在不合法的密钥字符,只要制定密钥时避开即可)
将幺元(乘法单位元)记作A,将满足x^3-x+1=0的乘法群生成元记作B,将B的0~25次方分别记作A~Z。这样,ROT13就正好相当于相反数(乘以负一)。维吉尼亚密码,本质上就是这个域上的乘除法。
下面是将27个字符表示为A、B、C(即1、B、B^2)的线性组合的查询表。
空格=0 A=1 N=-1
B=B J=B+A D=B-A
O=-B Q=-B+A W=-B-A
C=B^2 V=C+A M=C-A
K=C+B G=C+B+A L=C+B-A
E=C-B S=C-B+A H=C-B-A
P=-B^2 Z=-C+A I=-C-A
R=-C+B U=-C+B+A F=-C+B-A
X=-C-B Y=-C-B+A T=-C-B-A
如此这般,明文和密钥之间的运算便可不拘泥于普通的乘法,而是可以使用加法复杂的二元多项式来计算出密文了,只要求给定一个合法的密钥字符时,明文字符和密文字符可以一一对应即可。密钥甚至可以使用空格。(普通维吉尼亚的密钥中,空格不合法,因为无法除以0,而扩展维吉尼亚也可能存在不合法的密钥字符,只要制定密钥时避开即可)