GKCTF2020——CRYPTO

小学生的密码学

这道题就是简单的仿射密码
解密网站
GKCTF2020——CRYPTO_第1张图片
base64一下即是flag

babycrypto

这道题拿到题目可知是RSA,大数n使用工具暂时无法进行分解,而p给出了高位,低位还未知。
在网上找到了类似的题目,原文链接
GKCTF2020——CRYPTO_第2张图片
这里使用到一个开源的数学软件sagemath
GKCTF2020——CRYPTO_第3张图片
得到了p,于是接下来常规的RSA求解

import gmpy2
import math
from Crypto.Util.number import bytes_to_long, long_to_bytes

c = gmpy2.mpz(1422566584480199878714663051468143513667934216213366733442059106529451931078271460363335887054199577950679102659270179475911101747625120544429262334214483688332111552004535828182425152965223599160129610990036911146029170033592055768983427904835395850414634659565092191460875900237711597421272312032796440948509724492027247376113218678183443222364531669985128032971256792532015051829041230203814090194611041172775368357197854451201260927117792277559690205342515437625417792867692280849139537687763919269337822899746924269847694138899165820004160319118749298031065800530869562704671435709578921901495688124042302500361)
n = gmpy2.mpz(22356763374676421464625378500213339933332772809897207920729779273423674391734609826525432054721219700275907299132471518921609327317193522567659631757746842030241874692914098354564311806192080734895649520789778880115460999713973202684541940857690744940359412410680906226760273075221532248260114209496048785258860756023841150910290983974843412361701517438220974722832625030127395031631696995777436058406987465592189873785392136925593708921923255186282515777996509326779993612528103615281644689464568237409082282767318227236298791238683706176542426759149262625349498709445342710799386836175120162674849965878446213480453)
p = gmpy2.mpz(160734387026849747944319274262095716650717626398118440194223452208652532694713113062084219512359968722796763029072117463281356654614167941930993838521563406258263299846297499190884495560744873319814150988520868951045961906000066805136724505347218275230562125457122462589771119429631727404626489634314291445667)
q = n/p
e = 65537
d = gmpy2.invert(e, (p-1)*(q-1))
m = pow(c,d,n)
flag = long_to_bytes(m)

print flag

汉字的秘密

打开word一看就是之前实验吧中做过的当铺密码,根据规律得到
69 74 62 67 118 83 72 77 86 55 71 57 82 57 64 63 51 107
EJ>vSHMV7G9R9@?3k
显然这并不是flag,接下来是变异凯撒,编写脚本

#include 
int main ()
{
	int n[18]={69,74,62,67,118,83,72,77,86,55,71,57,82,57,64,63,51,107};
	int i,j=1;
	for(i=0;i<18;i++){
		printf("%c",n[i]+j);
		j++;
	}
}

你可能感兴趣的:(密码学)