-
-
[原创]第五题 青梅竹马
-
2019-3-20 22:32 2414
-
(作者:pIzza)
文本常量被base64
加密过.
from base64 import b64decode, b64encode from string import maketrans fr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' to = 'ABCyVPGHTJKLMNOFQRSIUEWDYZgbc8sfah1jklmnopqret5v0xX9wi234u67dz+/' trans = maketrans(fr, to) def dec(s): return b64decode(s.translate(trans)) s = ['bmdeTH8Xb2unTHN5TSVhTQ==', 'bWzXZSB3b3JrTHRvTGRvTQ==', 'sWE9LCBjb3JXZWNwTHN5TQ==', 'c24aZGzlc24n8CB3b3JrTQ=='] print(map(dec,s))
['no, wCong sn!!!!', 'moCe work to do!', 'yes, corCect sn!', "sn doesn't work!"]
首先校验输入格式, 输入长度大于等于12, 前两位字符不能都为A
, 第六与第十二个字符为V
, 所有字符是数字或字母.
将输入去掉第六与第十二个字符, 用base64
解密, 按小端序转为整数, 计算pow(x, 83, 20364840299624512075310661735)
, 结果作为下标获取文本常量, 当结果为2时得到正确答案的提示.
from Crypto.Util.number import inverse, long_to_bytes n = 20364840299624512075310661735 e = 83 factors = [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73] phi = reduce(lambda x, y:x*(y-1), factors, 1) d = inverse(e, phi) x = pow(2, d, n) s = long_to_bytes(x) t = b64encode(s).rstrip('=') t = t.translate(trans) t = t[:5] + 'V' + t[5:10] + 'V' + t[10:] print(t)
flag:PEDIyV9102dVreadyu
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
赞赏
他的文章
看原图