[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加密进行通讯的一个示例. 概览 ...
随机推荐
- H2 应用实例2
DIY 博客全文界面的推荐.反对.加关注.返回顶部.快速评论等小功能的集成 --> 转载 :一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb ...
- WebApi基础
1:当Controller中有相同参数的方法时,请求调用会报错 [HttpGet] public IEnumerable<string> Resturn() { return new st ...
- kindeditor浏览器兼容性问题
1.kindeditor在IE下出现异常“对象不支持“attachEvent”属性或方法” 通过开发人员工具会发现: 这时问题就很明了,也就是IE11版本不支持“attachEvent”; 解决方案: ...
- ajax工作原理(转)
在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景.原理.优缺点等各个方面都很少涉及null.这次写这篇文章的背景是因为公司需要对内部程序员做一个培训.项 ...
- Python爬虫--Requests库
Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,requests是python实现的最简单易用的HTTP库, ...
- OpenGLES 与 WebGL 中顶点属性的组织格式的误解 - 一个不好笑的笑话
版权声明:本文为博主原创文章,未经博主同意不得转载.转载联系 QQ 30952589.加好友请注明来意. https://blog.csdn.net/sleks/article/details/289 ...
- "静态方法里仅仅能调用静态变量和静态方法"具体解释
静态方法里能够调用静态方法和静态变量,同一时候也能调用非静态方法和非静态变量. public class Test { public Test() {}; public Test(int i) {th ...
- 利用Linux中的计划任务+PHP网页程序(转)
利用Linux中的计划任务+PHP网页程序,实现对web服务器运行状况的监测[每5分钟监测一次,并邮件提醒]一.我的监测服务器环境:rhel5.5+apache2.2+php5二.功能描述:写一个PH ...
- css 改变图片灰度颜色
我一直喜欢灰度图像因为我认为他们看起来更有艺术感.很多图片编辑如Photoshop很容易把你的彩色图像变成灰度.甚至有选择调整颜色深度和色调.不幸的是,这样的效果想做在网络上并不容易,因为浏览器有差异 ...
- 常见C C++问题(转)
这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...