作者yauhh (哟)
看板Programming
标题Re: [请益] 数学式 写成 程式码
时间Mon Dec 26 00:17:16 2011
※ 引述《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
1F:推 freeman0220:谢谢,我在试看看 175.180.67.19 12/26 00:39