前言:
摘抄自wiki的關於仿射變換的定義:
http://zh.wikipedia.org/wiki/%E4%BB%BF%E5%B0%84%E5%8F%98%E6%8D%A2
仿射變換,又稱仿射映射,是指在幾何中,一個向量空間進行一次線性變換並接上一個平移,變換為另一個向量空間。
一個對向量 平移
,與旋轉放大縮小
的仿射映射為
【1】
1、移位加密:
比方說:把字母表全部向右循環移1位,也就是A變成B,B變成C,... , Z變成A。
用數學一點的術語我覺得所謂“移位”就是映射吧。
那么我們可以寫出通解公式,——現在是已知明文和加密步驟,進行加密,也就是求密文。
New = (Old + k) (mod table) 【2】
注釋:
New:要求的密文
Old :明文
k :移位的位數
table:這張表有多大,比方說字母表就是26個字母,table就是26.
2、仿射變換:
移位加密和仿射變換有啥關系呢?
額 ,因為移位加密就是一種放射變換。。。
首先我們在1里面的變量命名現在改一下,以便更好地認識,變成:
y = (x + b)(mod m) 【3】
是不是和【1】很像啦,可惜我們的x沒有系數。。
但是沒關系,我們完全可以自己加上一個系數,把【3】變成:
y = (ax + b)(mod m) a,b為整數; 【4】
這樣已經很像了,只不過【1】里面的自變量是向量。
但是,我們這里討論的是一維的變換,所以不用用到2維及其以上的向量。(一維數字標記的向量就是普通的數嘛……)
3、知道了1、2這些,我們現在的目標就是——
"當知道一個一維的仿射變換的加密,
a. 怎么把明文加密
b. 怎么把密文解密 "
對於"a. 怎么把明文加密",我們已經解決了,就是【4】那個公式。
對於"b. 怎么把密文解密"嘛,其實也不復雜。待我不快不慢地說來。
首先由【4】我們可以得到什么?
沒錯!就是 y ≡ (ax + b)(mod m) —— 這是明顯的事實不用證明了。
然后正視一下題目是什么:我們現在已知a,b,y,m,要求x。
1). 左右移位一下 ,變為 y-b ≡ (ax)(mod m) 【5】
{為啥【5】是對的?
首先同余式可以相加,
即 若 a ≡ b (mod m), c ≡ d (mod m), 【*】
那么(a + c) ≡ (b + d)(mod m) .
——同余式可以相加的證明用同余的定義就好……
然后 y ≡ (ax + b)(mod m)
-b ≡ -b (mod m)
所以……
}
2). 已知y-b ≡ (ax)(mod m),x未知,求x.
現在已知ax ≡(y-b) (mod m);
{首先我們要知道 同余式可以相乘,若【*】,則 ac ≡ bd (mod m) .證明同樣可以基於同余定義。}
這時候我們就腦補了,如果有一個c能使得 cax ≡ x ≡ c(y-b) (mod m)就好了!
也就是說這個c如果能使得ca = 1或者 更寬一點的:ca ≡ 1(mod m).那么就解決了!
3). 於是問題變成了:找一個c使得,ca ≡ 1(mod m)
於是很容易聯系到費馬小定理、歐拉定理一類的。
但是費馬小定理要求m一定要是素數,這樣和我們題目不符。
所以看看歐拉定理,對 gcd(a,m) = 1(m>1),有aΦ(m) ≡ 1 (mod m)
{Φ(m) 為歐拉函數,就是小於等於m的與m互素的正整數個數。如Φ(2) = 1 ,Φ(6) = 2——6與{1,5}互素。}
所以如果ca = aΦ(m) ,那么就有ca ≡ 1(mod m)。
於是c = aΦ(m)-1 . 但是gcd(a,m) = 1,這一點不能漏。
4、綜上,我們發現了,當c = aΦ(m)-1 時 ;
cax ≡c(y-b) (mod m)
化為 x ≡c(y-b) (mod m) {現在要附加gcd(a,m)=1這個條件了!}
5、那么對於仿射變換,
我們知道變化規則[即位移b]后,如何把密文[y]翻譯成明文[x]呢?
結論是:
step 1. 求 c = aΦ(m)-1
step 2. x ≡c(y-b) (mod m)
番外小劇場:
窩:你在2里面為啥要改名字?該問題純屬好奇!
big窩:此中原因有2——
1. 如文中所說,為了更直觀地比較。
2. 也是最根本的原因——變量命名如此之平凡,根本不是我的feel!OK?
窩:......
窩:第二個問題——你怎么知道同余式符合相加相乘原理?你怎么想到的?
big窩: 首先"同余式符合相加相乘原理"這個結論在數論里就像是實數有相加相乘的運算一樣自然,如果想不到那么你需要找一本數論的書看看,不需要看完這就足以變成你的常識。至於怎么想到的,如果給你一堆數,你能想到的最基本的運算就是做加減乘除了吧?
窩:恩……好像是的……
big窩:那不就得了,說了同余式符合相加相乘原理是同余式的基本運算。
窩:……哦……