土办法快速求密码学RSA中的d值

  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的取值可用扩展欧几里德算法求出。(以下为扩展欧几里德算法例子)

土办法快速求密码学RSA中的d值_第1张图片

  将(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%。所以还是适当用用就行。

你可能感兴趣的:(心得体会)