Re: [請益] 數學式 寫成 程式碼

看板Programming作者 (喲)時間12年前 (2011/12/26 00:17), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《freeman0220 (wiki)》之銘言: : 最近要學一點程式,要用提供的數學式 寫成程式碼 : 有點不知道要怎麼寫 : 也不知道要去哪個版發問 : 所以在這裡詢問,請見諒 : Let p = 7, q = 11, then n = 77. 這查一下是 Modified Rivest's Scheme, 說選二個夠大,不相同的質數 p, q, 則 n = p * q. n 是那個公鑰, p, q 則是私鑰. : For simplicity, let l = 2, that is, each plaintext message is : split into 2 smaller pieces. Let ri = si = 5, i = 1, 2. : Suppose there are two plaintext numbers in Z77: a = 10 : and b = 7. It can easily be seen that 7a+b ≡ 0 (mod 77) and : 14a + 2b ≡ 0 (mod 77). The scheme runs as follows. : Encrypting a: : Decompose a into a1 = 4 and a2 = 6. : E(a) = ((4 × 5 mod 7, 4 × 5 mod 11), (6 × 5 mod 7, 6 × : 5 mod 11)) = ((6, 9), (2, 8)) 這裡編碼是說,你有 p, q, 對 p 取 r_i < p, s_i < q, a 要拆成二份 a_1, a_2, 因為長度 L = 2. 用 p, q 編碼 E(a) 就要算出一對數對, 為 ((a_1 * r_1 mod p, a_1 * s_1 mod q), (a_2 * r_2 mod p, a_2 * s_2 mod q)) 如果用C語言, mod 就是 %. Javascript, mod也是 %. : Encrypting b: : Decompose b into b1 = 3 and b2 = 4. : E(b) = ((3 × 5 mod 7, 3 × 5 mod 11), (4 × 5 mod 7, 4 × : 5 mod 11)) = ((8, 4), (6, 9)) : Computing E(7a + b): : E(7a + b) = ((7 × 6 + 8, 7 × 9 + 4), (7 × 2 + 6, 7 × 8 + : 9)) mod 77 = ((50, 67), (20, 65)) 你要注意 E_K : Z -> (Z * Z)^L 就是說,這個函數丟個數字下去, 得回來的是數對, 而且這個例子還是數對的數對 這種結構. 你可以用Javascript寫函數丟回JSON格式的資料: 例如, function E(z, p, q) { ... return { 'first': u, 'second': v }; } 然後這個呼叫: var e_pq = E(a, p, q); 就可以這樣解: alert(e_pq.first); alert(e_pq.second); 基本上計算過程應該蠻簡單的, 只要注意結構項目不要擺錯位置就好了. -- /yau -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.227.16

12/26 00:39, , 1F
謝謝,我在試看看
12/26 00:39, 1F
文章代碼(AID): #1EzqoGbi (Programming)
文章代碼(AID): #1EzqoGbi (Programming)