def encrypt(m, N):
L = numbits(m)
random.seed()
r = random.randint(2, N-1)
x = pow(r, 2, N)
y = x
l = 0
for k in range(0, L):
l = l << 1
l |= y & 1
y = pow(y, 2, N)
return (m ^ l, y, L)
以上的扣這個是問題的主要部份. 問題的根本建構在 Finite Field上, 隨機挑選一個數字之後, 接續的做次方運算得到下一個數字. 根據要加密文件的 bit 數量, 得到一連串的數字(Sn), 並且只取每個數字的最後一個 bit 來跟本文做 xor 運算而得到密文. 最後會給我們{密文,最後加密數字,本文長度}
舉一個簡單的例子:
- 給一個 GF(11)的 Finite Field (也就是{0,1,2,3,4,5,6,7,8,9,10})
- 開始的隨機數字為3.
- 本文的binary為11010