cryptohack wp day(3)
第二节模运算----第一题( GCD )

在做这道题前,了解下欧几里得算法:
欧几里得算法,也叫辗转相除法,用于求解两个非负整数a和b的最大公约数(Greatest Common Divisor, GCD),即能够同时整除它们的最大正整数。
算法的基本思想是,通过不断求解a和b的余数的最大公约数,最终可以得到a和b的最大公约数。
具体地,设r为a除以b的余数,则有:
a = bq + r
其中,q为a除以b的商。如果r等于0,则b就是a和b的最大公约数;否则,继续使用同样的方法求解b和r的最大公约数。直到r等于0为止,此时的b就是a和b的最大公约数
以下是Python实现该算法的代码:
a = 66528
b = 52920
def gcd(a, b): #欧几里得算法
if b == 0:
return a
else:
return gcd(b, a % b)
print(gcd(a,b))
第二题(Extended GCD)

在进行这道题之前,先了解下扩展欧几里得算法吧:
扩展欧几里得算法是求解两个整数a、b的最大公约数(Greatest Common Divisor, GCD)以及一组整数x、y,使得它们满足以下等式:
ax + by = gcd(a,b)
其中,x、y是整数,gcd(a,b)表示a、b的最大公约数。
该算法的基本思想是利用欧几里得算法递归求解gcd(a,b),并在递归的过程中同时求解x、y的值。
具体地,假设我们已经求得了b和a%b(即a除以b的余数)的最大公约数gcd(b, a%b),并得到了一组整数x1、y1,使得:
bx1 + (a%b)y1 = gcd(b, a%b)
接下来,我们可以将a%b表示为a-b(a//b),其中a//b表示a除以b的商,将其带入上式得:
bx1 + (a - b(a//b))y1 = gcd(b, a%b)
移项可得:
ay1 + b(x1 - (a//b)y1) = gcd(b, a%b)
由此可以得到a和b的最大公约数gcd(a,b)和一组整数x、y,使得:
ax + by = gcd(a,b)
其中:
gcd(a,b) = gcd(b, a%b)
x = y1
y = x1 - (a//b)*y1
最终的结果是递归求解出gcd(a,b)的同时求得了x和y的值。
以下是python代码实现:
def egcd(a, b): #扩展欧几里得算法
if b == 0:
return (a, 1, 0)
else:
gcd, x1, y1 = egcd(b, a % b)
x = y1
y = x1 - (a // b) * y1
return (gcd, x, y)
print(egcd(a,b))
第三题(Modular Arithmetic 1)

分析下吧,先说下同余
同余“≡”是数论中表示同余的符号
同余的定义如下
给定一个正整数m,如果两个整数a和b满足a-b能被m整除,即(a-b)modm=0,那么就称整数a与b对模m同余,记作a≡b(modm),同时可成立amodm=b
再次提醒注意,同余与模运算是不同的,a≡b(modm)仅可推出b=amodm
对于第一个问题,我们需要找到一个整数x,使得11和x在模6下是同余的。因为6是一个较小的数,我们可以手动计算11除以6的余数,然后将余数减去11,直到得到一个小于6的余数。这样的余数就是我们要找的x。
11除以6的商是1,余数是5,因此我们可以将11减去5,得到6,这是6的一个倍数,因此我们可以得出11 ≡ 5 模 6。由于5是小于6的,因此5是我们要找的最小非负整数x。
对于第二个问题,我们需要找到一个整数y,使得8146798528947和y在模17下是同余的。因为这个数太大,我们需要使用计算器来进行计算。
我们可以使用Python中的模运算符号%来计算这个问题。具体来说,我们可以计算8146798528947除以17的余数,这样的余数就是我们要找的y。Python代码如下:
y = 8146798528947 % 17
计算结果是4,因此8146798528947 ≡ 4 模 17。因为4是小于17的,因此4是我们要找的最小非负整数y。
因此,x = 5,y = 4是这两个问题的答案。
第四题(Modular Arithmetic 2)

在学习这道题之前,先了解下费马定理吧,如下:
费马定理是数论中的一个基本定理,由法国数学家皮埃尔·德·费马于17世纪提出。该定理的原始形式是:对于任何素数p和任何不是p的倍数的正整数a,a的p-1次方减去1能够被p整除,即a^(p-1) ≡ 1 (mod p)。
换句话说,如果p是一个素数,那么对于任何不是p的倍数的正整数a,a的p-1次方对p取模的结果为1。这个定理的一个重要应用是在密码学中的RSA算法,其中大素数的选取基于费马定理。
费马定理的证明较为复杂,这里不再赘述。值得一提的是,当p是一个合数(即非素数)时,费马定理并不成立,这是因为如果p是一个合数,那么a^(p-1)除以p的余数可能不为1,例如,当a=2,p=15时,2^14 ≡ 1 (mod 15)不成立。
回到这道题,273246787654^65536 mod 65537,根据费马定理a^(p-1) ≡ 1 (mod p),取p=65537,则在进行模运算273246787654 % 65537 =1,即答案为1.
cryptohack wp day(3)的更多相关文章
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- wp已死,metro是罪魁祸首!
1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- Android,ios,WP三大手机系统对比
从前,我以为.一个手机系统只是一个系统的UI风格,没什么不同的.然而,在我混合使用这三个手机系统之后,才明白,一个手机系统远不只一个UI那么简单,而真的是可以称之为一个“生态”. 首先祭出三台经典设备 ...
- 搜狗输入法wp风格皮肤
换了个nexus 发现输入法真的没有wp的好用 没办法,刚好搜狗输入法有定制皮肤的选项,所以自己做了个wp风格的输入法皮肤. 一点微小的工作 http://pan.baidu.com/s/1kVsHd ...
- 免费获取WP之类的开发者权限或免费使用Azure 2015-10-19
上一次弄wp真机调试的时候,卡住了,这里讲一下怎么解决(http://www.cnblogs.com/dunitian/p/4870959.html) 进这个网址注册一下:https://www.dr ...
- 【WP开发】读写剪贴板
在WP 8.1中只有Silverlight App支持操作剪贴板的API,Runtime App并不支持.不过,在WP 10中也引入了可以操作剪贴板的API. 顺便说点题外话,有人会说,我8.1的开发 ...
- 【WP开发】不同客户端之间传输加密数据
在上一篇文章中,曾说好本次将提供一个客户端之间传输加密数据的例子.前些天就打算写了,只是因一些人类科技无法预知的事情发生,故拖到今天. 本示例没什么技术含量,也没什么亮点,Bug林立,只不过提供给有需 ...
- 【WP开发】加密篇:双向加密
说起双向加密,如果以前在.NET开发中弄过加/解密的朋友都不会陌生,常用的算法有DES.AES等.在RT应用程序中,也提供了加密相关的API,算法自然是一样的,只是API的封装方式不同罢了,因为RT不 ...
- 【WP 8.1开发】How to 图像处理
在今天的吹牛节目开始之前,先交代一件事: 关于玩WP 8.1开发所使用的VS版本问题.对版本的要求是2013的Update2,这是最低要求,只要是这个版本或以上都可以,而update3,update4 ...
随机推荐
- webpack 3/4踩坑,我太难了,从安装、卸载、到使用,各相应的版本号,sass-loader报错-版本的原因,webpack -v 不识别,没卸载干净
-先说卸载: wabpack@4对应的每个插件的版本号都在最后 1 全局安装的话,npm uninstall webpack -g 有时候并不能卸载干净, 2 webpack -v 可判断是否安装成 ...
- ORACLE ORA-12638:身份证明检索失败
使用PLSQL连接远程数据库时,有时候会遇到提示ORA-12638:身份证明检索失败的问题,怎么办呢?有两种方法,选择一种更改就行了,网络上大多是第一种方法,如果已经找过不是你想要的答案,那不妨直接看 ...
- spring下的restTemplate使用
首先上配置,由于restTemplate不支持一些返回格式,所以需要自己手动配置 /** * @Description : restTemplate配置类 * @Author : wzkris * @ ...
- Mysql用户及其权限
一.创建用户 create user 'user_name' identified by 'password'; 二.用户授权 grant [权限名] on 数据库名.表名 to user_name ...
- ASP.NET Web应用程序(.NET Framework)开发网站
1.创建项目 2.控制器脚本说明 [FromBody]JObject value:JObject此类型默认为string,但是string无法正常解析复杂类型的Json数据,所以修改为JObject类 ...
- SQL注入,Hacker入侵数据是如何做到的
什么是SQL注入? SQL注入就是未将代码与数据进行严格的隔离,导致在读取用户数据的时候,错误地把黑客注入的数据作为代码的一部分执行. SQL注入自诞生以来以其巨大的杀伤力闻名. 例子: 典型的SQL ...
- 【绘制分形图案】多重收缩打印机(MRCM)举例
note 2020-08-05搬运 下面的内容来自我的CSDN博客 多重收缩打印机(MRCM)是生成分形图案的一种方法.主要思想还是多次迭代. 每次都是将上一次的输出拿来做线性仿射变换后重新组合在 ...
- python爬取今日的bing壁纸
#!/usr/bin/python #你要的文件夹是 E://pics// ps:没有的话帮你建一个 import requests import os from datetime import da ...
- Lua基础语法学习笔记
Lua是一门语言,我们可以使用一个库,可以在运行时去编译执行Lua中的代码,从而实现自己的内存中的数据和逻辑: 准备学习环境: 新建一个Lua项目目录,用来写我们的Lua代码: 进入目录,右键使用vs ...
- C++类的构造函数、析构函数、拷贝构造函数、赋值函数和移动构造函数详细总结
目录 1. 五种函数介绍 2. 左值&右值怎么区分?怎么看? 3. 匿名对象的3种使用情况 4. 代码详细验证每个函数调用情况 4.1 测试 f_1 函数(函数形参测试 -- 值传递) 4.2 ...