Day 14?
This commit is contained in:
110
Day 14/decode.py
Normal file
110
Day 14/decode.py
Normal file
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import math
|
||||
|
||||
c = int("2A4C9AA52257B56837369D5DD7019451C0EC04427EB95EB741D0273D55", 16)
|
||||
t = int("1398ED7F59A62962D5A47DD0D32B71156DD6AF6B46BEA949976331B8E1", 16)
|
||||
n = int("0D8A7A45D9BE42BB3F03F710CF105628E8080F6105224612481908DC721", 16)
|
||||
|
||||
def linear_diophantine_equation(a, b):
|
||||
if b > a:
|
||||
return linear_diophantine_equation(b, a)
|
||||
|
||||
if b == 0:
|
||||
return a, 1, 0
|
||||
|
||||
d, x, y = linear_diophantine_equation(b, a % b)
|
||||
return (d, y, x - (a // b) * y)
|
||||
|
||||
def multiplicative_inverse(a, b):
|
||||
d, x, y = linear_diophantine_equation(a, b)
|
||||
if y < 0:
|
||||
y = (b if b > a else a) + y
|
||||
return y
|
||||
|
||||
def gcd(a, b):
|
||||
d, x, y = linear_diophantine_equation(a, b)
|
||||
return d
|
||||
|
||||
# n > t > c
|
||||
|
||||
# m = flag
|
||||
|
||||
def test_solution(m):
|
||||
return m**2 % n == c
|
||||
|
||||
# m**2 % n = x**2
|
||||
# m**2 + k*n = c
|
||||
# m % n = x
|
||||
# m - k*n = x
|
||||
# m = x + k * n
|
||||
|
||||
# x = int(math.sqrt(c))
|
||||
#
|
||||
# while not test_solution(x):
|
||||
# x += n
|
||||
# print(hex(x), hex(((x**2)%n)-c))
|
||||
# print(x)
|
||||
|
||||
mult_inverse = multiplicative_inverse(c, n)
|
||||
|
||||
d, x, y = linear_diophantine_equation(mult_inverse, mult_inverse*n)
|
||||
print(hex(d + 6*t - 2*c), test_solution(d + 6*t - 2*c))
|
||||
|
||||
# x = math.sqrt(n)
|
||||
# print(x)
|
||||
#
|
||||
# print(test_solution(c * math.sqrt()))
|
||||
|
||||
# print(test_solution(math.floor(math.sqrt(c * n))))
|
||||
|
||||
# c = (m**2) % n
|
||||
# c = m*m - k*n
|
||||
# 1 = (m**2)/c - (k*n)/c
|
||||
# 1 = (m**2)/c - k*(n/c)
|
||||
|
||||
# k = 1
|
||||
# test = k * n / c
|
||||
# while test != math.floor(test):
|
||||
# k += 1
|
||||
# test = k * n / c
|
||||
#
|
||||
# print(k, test)
|
||||
|
||||
|
||||
# x = m*m
|
||||
# c = x % n
|
||||
# c = x - k*n
|
||||
# c = k*n+x
|
||||
# x ~ (48 56 31 38 2d) ^ 2
|
||||
# m_guess = int("485631382d616161612d616161612d616161612d616161612d61616161", 16)
|
||||
# x_guess = m_guess ** 2
|
||||
# k_guess = (c - x_guess) / n
|
||||
#
|
||||
# i = 0
|
||||
# while not test_solution(m_guess):
|
||||
# m_guess += 1
|
||||
# i += 1
|
||||
#
|
||||
# print(i, m_guess)
|
||||
|
||||
# print(test_solution(math.sqrt(c + n)))
|
||||
|
||||
# print(math.sqrt(c))
|
||||
|
||||
# c = x**2
|
||||
# m**2 % n = x**2
|
||||
# m % n = x
|
||||
|
||||
# i = 0
|
||||
# solutioni = 0
|
||||
# while i < 100:
|
||||
# i += 1
|
||||
# if test_solution(i):
|
||||
# print(i, i**2%n)
|
||||
|
||||
# 4**2 % 13 = 3
|
||||
# 9**2 % 13 = 3
|
||||
# 17**2 % 13 = 3
|
||||
# 22**2 % 13 = 3
|
||||
# 30**2 % 13 = 3
|
||||
9
Day 14/power.ps1
Normal file
9
Day 14/power.ps1
Normal file
@@ -0,0 +1,9 @@
|
||||
. "$PSScriptRoot\flag.ps1" #thumbprint 1398ED7F59A62962D5A47DD0D32B71156DD6AF6B46BEA949976331B8E1
|
||||
|
||||
if ($PSVersionTable.PSVersion.Major -gt 2)
|
||||
{
|
||||
$m = [System.Numerics.BigInteger]::Parse($flag, 'AllowHexSpecifier');
|
||||
$n = [System.Numerics.BigInteger]::Parse("0D8A7A45D9BE42BB3F03F710CF105628E8080F6105224612481908DC721", 'AllowHexSpecifier');
|
||||
$c = [System.Numerics.BigInteger]::ModPow($m, 1+1, $n)
|
||||
write-host "encrypted flag:" $c.ToString("X");
|
||||
}
|
||||
Reference in New Issue
Block a user