RSA加密算法是一种非对称加密算法。可用于数字签名、加密/解密、密钥交换。现在讲讲其加密/解密部分。
在加密/解密算法中,需要使用到的数字有素数p、素数q、e、d;其中,
e满足gcd((p-1)*(q-1),e)= 1,即e与(p-1)*(q-1)互质。
d则满足e*d mod(p-1)*(q-1)= 1。
双方已知n=p*q,发送方已知e,接收方已知d。加密算法为C=M^e mod n,解密算法为M=C^d mod n,即M=M^ed mod n。(*C为密文,M为明文)
d的取值可用扩展欧几里德算法求出。(以下为扩展欧几里德算法例子)
将(p-1)*(q-1)代入到a,将e代入到b,当求到b=0时,取x=1,y=0;然后开始向上推导x、y:楼上x=楼下y,楼上y=楼上x-((楼上a/b向上取值)*(楼下y));最终求到第一个y(以y0表示)时结束。此时,d=y0 mod a。
然而,用此方法求d有些麻烦。鄙人有一个土办法可以快速求出大部分的d值。
利用e*d mod (p-1)(q-1)=1;我们可以知道:e*d=((p-1)*(q-1))的倍数+1。所以只要使用((p-1)*(q-1))的倍数+1除以e,能整除时,商便是d值。(一般在2倍就能求出d值)
这个土办法比扩展欧几里德算法快得多,但正确率不能保证100%。所以还是适当用用就行。