[PE182]RSA encryption
https://projecteuler.net/problem=182
题意:
找出满足下列条件的所有$e$ 的和,
- $1 < e < \varphi \left( {1009,3643} \right)$
- $gcd(e,φ)=1$
- 满足${m^e} \equiv m{\rm{ }}\bmod {\rm{ }}n$ 的$m$的个数最小
解答:
这道题最重要的就是解决这个问题:
${m^e} \equiv m{\rm{ }}\bmod {\rm{ }}n$ 中$e$确定时,$m$的取值的个数。
由于n是合数,且 $n = p*q$ ,所以先考虑${m^e} \equiv m{\rm{ }}\bmod {\rm{ }}p$ 和 ${m^e} \equiv m{\rm{ }}\bmod {\rm{ }}q$ ,
$m({m^{e - 1}} - 1) \equiv 0{\rm{ }}\bmod {\rm{ }}p$ , $p$ 是质数
- $m==0$ ,恒成立
- $m!=0$ ,${m^{e - 1}} \equiv 1\bmod {\rm{ }}p$
考虑 ${a^b} \equiv 1\bmod p$ ,$a$ 、$p$ 互素,此式中$b$确定时,$a$的个数
因为$p$ 为素数,所以必存在原根$r$ ,使得$ a= {r^k}$ ,
${r^{kb}} = 1{\rm{ }}\bmod {\rm{ }}p$
这里很容易联想到关于${a^k}\bmod {\rm{ }}p$的阶那个公式,
$ord({r^b}) = \frac{{\varphi (p)}}{{(\varphi (p),b)}},(r,p) = = 1$
变换一下位置,
$(\varphi (p),b) = \frac{{\varphi (p)}}{{ord({r^b})}},(r,p) = = 1$
${r^{ord({r^b})}}$ ,${r^{2ord({r^b})}}$ ,...,${r^{(\varphi (p ),b )ord({r^b})}}$就是使上式成立的$a$的可能取值,
所以左边就是解的个数。
所以最初的解为$\gcd (\varphi (p),b) = \gcd (p - 1,b)$
回到上面,还有$m==0$ 的情况,
所以解为$\gcd (\varphi (p),b)+1 = \gcd (p - 1,b)+1$
再看如何解决模数不为质数的问题,这里 就需要用到中国剩余定理,根据中国剩余定理,每一对$p$ 和 $q$ ,就会产生一个解,依据乘法原理,所以最后的解为$[\gcd (p - 1,e - 1) + 1]*[\gcd (q - 1,e - 1) + 1]$
接下来:就是枚举$e$ 的问题了
- 直接进行暴力
- 观察$e$,因为$\gcd ((p - 1)(q - 1),e ) = = 1$ ,故$e$ 为奇数,$e-1$ 为偶数, $\gcd (e - 1,p - 1) > = 2$ ,
$\gcd (e - 1,q - 1) > = 2$ ,这里确定了两个gcd的下界的最小值,而且显然这两个下界在枚举$e$ 的过程中是可以取到的,所以这里可以直接判断最小的情况。
复杂度:$O(n\log n)$ ,其中$logn$ 是辗转相除的复杂度,证明见维基百科。
代码1:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=<<;
ll p=,q=,factor[];
ll n=q*p,phi=(p-)*(q-),mi=inf,ans;
int main(){
for(ll i=;i<phi;++i) if(__gcd(i,phi)==) factor[i]=(__gcd(i-,p-)+)*(__gcd(i-,q-)+),mi=min(mi,factor[i]);
for(ll i=;i<phi;++i) if(factor[i]==mi) ans+=i;
printf("%lld\n",ans);
}
代码2:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=<<;
ll p=,q=;
ll n=q*p,phi=(p-)*(q-),ans;
int main(){
for(ll i=;i<phi;++i) if(__gcd(i,phi)==&&__gcd(i-,q-)==&&__gcd(i-,p-)==) ans+=i;
printf("%lld\n",ans);
}
[PE182]RSA encryption的更多相关文章
- PKCS #1 RSA Encryption Version 1.5
PKCS #1 RSA Encryption Version 1.5 在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式 ...
- PKCS #1 RSA Encryption Version 1.5 填充方式
在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式安装以下方式进行 (1) EB = 00+ BT+PS +00 + D ...
- RSA算法
RSA.h #ifndef _RSA_H #define _RSA_H #include<stdio.h> #include<iostream> #include<mat ...
- Windows phone应用开发[19]-RSA数据加密
在这个系列的第十六章节中Windows phone应用开发[16]-数据加密 中曾详细讲解过windows phone 常用的MD5,HMAC_MD5,DES,TripleDES[3DES] 数据加密 ...
- rsa && sha1 js code
jsbn.js /* * Copyright (c) 2003-2005 Tom Wu * All Rights Reserved. * * Permission is hereby granted, ...
- Go加密解密之RSA[转]
安全总是很重要的,各个语言对于通用的加密算法都会有实现.前段时间,用Go实现了RSA和DES的加密解密,在这分享一下.(对于RSA和DES加密算法本身,请查阅相关资料) 在PHP中,很多功能经常是一个 ...
- RSA (cryptosystem)
https://en.wikipedia.org/wiki/RSA_(cryptosystem) RSA is one of the first practical实用性的 public-key cr ...
- Java 进行 RSA 加解密时不得不考虑到的那些事儿
1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适 公钥加密,私钥解密.加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无 ...
- OpenSSL中的大数接口与基于其的自用RSA加密接口设计
本文记录了初次接触OpenSSL中的大数模块,重温了RSA加密流程,使用OpenSSL的接口包装成自用RSA加密接口,并且利用自己的接口演示了Alice与Bob通过RSA加密进行通讯的一个示例. 概览 ...
随机推荐
- TP框架---thinkphp使用ajax
thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法. 一.thinkphp使用ajax返回数 ...
- with(nolock) 与 with(readpast) 与不加此2个的区别
调试窗口一: 或者查询窗口一: 总之:事务没有结束 查询窗口二:
- 云服务器 ECS Linux CentOS 修改内核引导顺序
由于 CentOS 7 使用 grub2 作为引导程序,所以和 CentOS 6 有所不同,并不是修改 /etc/grub.conf 来修改启动项,需要如下操作: 1. 查看系统内部有多少个内核: c ...
- java参数的值传递和引用传递
今天抽了点时间继续啃java核心基础,即使出来做web挺长时间了,始终觉得基础极其重要. 遇到了java参数的传递类型,豁然开朗之时不忘写下记录. java中采用的总是值传递,包括对对象参数的传递,采 ...
- 【题解】CF1103D Professional layer
[题解]CF1103DProfessional layer 神题做前先\(orzyyb\) 一个很好的性质(之前也见过但是没有想到的) zhengchu \(gcd\le 10^{12}\) 所以不同 ...
- 我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑
又是一道面试题,来测试你的Java基础是否牢固. 题目:以下代码的运行结果是? public class TestValue { public static void test(String str) ...
- 使用AXIS2作为Client訪问WebService
使用AXIS2,能够方便的构建WebService的server端,也能够非常方便的作为Cilent,来訪问别的WebService. 以下依据工作中的经历,整理了一下,作为Cilent訪问WebSe ...
- 您使用的是不受支持的命令行标记 chrome
检查 chrome://flags/#extensions-on-chrome-urls 是否开启 开启了的话就关掉检查 启动chrome的快捷方式是否在目标后有额外的参数 有就删了 在浏览器中输入c ...
- oracle 11g ocr 冗余配置
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/royjj/article/details/30506343 oracle 11g ocr 冗余 ...
- SVG圆盘时钟动画
在线演示 本地下载