怎么获得满足p≡q≡3(mod 4)的两个大随机素数p和q?

_sunshine 2015-05-20 10:11:21
不明白p≡q≡3(mod 4)同余式怎么解,最近要用到Rabin,但之前又没接触过,烦恼知道的朋友告知一二!
...全文
375 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloud_yq 2019-03-12
  • 打赏
  • 举报
回复
满足的素数应该是 4*k+3
iyomumx 2015-05-20
  • 打赏
  • 举报
回复
素数只有4k+1和4k+3两种形式,所以直接生成,不符合的丢弃就好了
_sunshine 2015-05-20
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
如果这个很容易获得的话,RSA加密就无效了。
是解这个同余式,不是解密。是自己要生成两个素数,然后用于加密,但是要满足上面的同余式。
赵4老师 2015-05-20
  • 打赏
  • 举报
回复
如果这个很容易获得的话,RSA加密就无效了。
赵4老师 2015-05-20
  • 打赏
  • 举报
回复
引用 2 楼 dy106 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 如果这个很容易获得的话,RSA加密就无效了。
是解这个同余式,不是解密。是自己要生成两个素数,然后用于加密,但是要满足上面的同余式。[/quote] RSA加密难以破解的理论基础就是求类似同余式的解是一个很耗时操作。
要求:
1. 随机搜索大素数随机生成公钥和私钥。
2. 用公钥对任意长度的明文(字符)加密。
3. 用私钥对密文解密。
4. 界面简洁、友好便于操作。
环境:
1. 硬件环境:PC机一台
2. 软件环境:Windos 2000/XP, VC++6.0
RSA算法原理:
1. 首先,找出两个素数key_P,key_Q,令key_N = key_P * key_Q。根据欧拉(Euler)数(key_N)的定义为小于key_N且与key_N互素的正整数个数,如果key_P和key_Q的最大公约数GCD(key_P,key_Q)=1,则(key_N)=(key_P) *(key_Q),特别地,如果若key_P != key_Q且都是素数,则(key_N)=(key_P-1)*(key_Q-1)。这时,我们令key_Z = (key_N) = (key_P-1)*(key_Q-1)。并且,key_N公开,key_Z要保密。
2. 然后,选择一个与key_Z互素的整数key_D,作为解密密钥。Key_D公开。
3. 解同余方程key_E * key_D mod key_Z = 1。得到的key_E就是加密密钥。Key_E需要保密。
这个时候key_E一定存在。因为key_D和key_Z互素,根据欧几里德算法,GCD(key_D,key_Z) = 1,而扩展欧几里德算法key_D存在模key_Z乘法逆元的充分必要条件是GCD(key_D,key_Z) = 1。至于key_E怎么得到,用辗转相除法即可得到,下面还会就模key_Z的扩展欧几里德算法予以祥述。
4. 接着做加密和解密信息处理。发送端将要发送信息为key_P,通过key_C = key_P^key_E mod key_N 进行处理,然后将密文key_C 发到接受端。这时即使中途有人窃取信息,也只能得到密文,而且,窃取者很难通过公钥(key_N,key_E)对密文进行解密。这时接受端接受到密文。并通过密钥(key_N,key_D)进行解密处理:key_P = key_C^key_D mod key_N。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧