iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Security

資安小白的密碼學從0到1-CryptoHack平台解題紀錄系列 第 8

【Day 8】Modular Arithmetic 01 - gcd & egcd

  • 分享至 

  • xImage
  •  

前言

此篇主要為writeup跟歐幾里得算法相關筆記
會解以下兩題,開始吧( ̄︶ ̄)↗ 

https://ithelp.ithome.com.tw/upload/images/20230918/20162613omsOqFzoON.png

Writeup

Greatest Common Divisor

題目

網址 : https://cryptohack.org/courses/modular/gcd/
https://ithelp.ithome.com.tw/upload/images/20230918/20162613qmYsQxOUXi.png

思路

這題要我們求出a, b兩數的公因數,可利用輾轉相除法(歐幾里得算法)來解

解法1

  • code
a = 66528
b = 52920

while(b != 0):
    temp = a % b
    a = b
    b = temp
print(a)

解法2

利用python math函式庫中的gcd()

  • code
import math
print(math.gcd(66528, 52920))

簡單多惹XD

  • Output
    https://ithelp.ithome.com.tw/upload/images/20230918/20162613fdXEvPuOuW.png

flag : 1512

Extended GCD

題目

網址 : https://cryptohack.org/courses/modular/egcd/
https://ithelp.ithome.com.tw/upload/images/20230918/20162613l5tLsbiuYL.png

思路

利用擴展歐幾里得算法得出u跟v,flag為數值最小的

解法

python -m pip install egcd

from egcd import egcd
p = 26513
q = 32321
print(egcd(32321,26513))
  • Output
    https://ithelp.ithome.com.tw/upload/images/20230918/20162613DIcw9jA8sZ.png

flag : -8404

統整筆記

  • 歐幾里得算法(輾轉相除法,來源:https://www.csie.ntu.edu.tw/~b98902112/cpp_and_algo/cpp02/euclidean_algorithm.html)
    https://ithelp.ithome.com.tw/upload/images/20230918/20162613Kw8dPD37FB.png
    34先跟10除,得到餘數4後10再去跟4除,得到餘數2後再去跟4除,最後得到0結束
    設兩數a, b 且a > b, 商為q, 餘數為r, mod用"%"代替
    輾轉流程(讓a永遠都是被除數) :
  1. r = a%b
  2. a = b
  3. b = r
  4. 如果b為0就結束,否則回到第1點
  5. 最後b為兩數最大公因數

小結

今天複習了輾轉相除法跟學到了擴展歐幾里得算法,有點小難,不過還是有去理解一下惹(但函式庫真滴好用XD)明天繼續下面兩題!

參考資料

擴展歐幾里得算法 : https://zh.wikipedia.org/zh-tw/%E6%89%A9%E5%B1%95%E6%AC%A7%E5%87%A0%E9%87%8C%E5%BE%97%E7%AE%97%E6%B3%95
擴展歐幾里得算法(影片講解) : https://www.youtube.com/watch?v=hB34-GSDT3k&t=2s&ab_channel=GVSUmath
輾轉相除法 : https://www.csie.ntu.edu.tw/~b98902112/cpp_and_algo/cpp02/euclidean_algorithm.html


上一篇
【Day 7】模運算小筆記
下一篇
【Day 9】Modular Arithmetic 02 - Fermat's little theorem
系列文
資安小白的密碼學從0到1-CryptoHack平台解題紀錄31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言