Re: [請益] 數學式 寫成 程式碼
※ 引述《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
討論串 (同標題文章)