bugkuCTF:Cryptography 加密

bugkuCTF:Cryptography 加密

文章目录

  • bugkuCTF:Cryptography 加密
    • 滴答~滴
    • 聪明的小羊
    • ok
    • 这不是摩斯密码
    • 简单加密
    • 散乱的密文
    • 凯撒部长的奖励
    • 一段base64
    • .?!
    • +[]-
    • 奇怪的密码
    • 托马斯.杰斐逊
    • zip伪加密
    • 告诉你个秘密
    • 这不是md5
    • 贝斯家族
    • 富强民主
    • python{N1CTF}
    • 进制转换
    • affine
    • crack it
    • rsa
    • 来自宇宙的信号

滴答~滴

-... -.- -.-. - ..-. -- .. ... -.-.

摩斯电码
KEY{bkctfmisc}

聪明的小羊

一只小羊翻过了2个栅栏
KYsd3js2E{a2jda}

提示的很明显,栅栏密码,2

KYsd3js2
E{a2jda}

KEY{sad23jjdsa2}

ok

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.

ook编码,有很多在线解密网站可以解,在bugku的tools里也有
flag{ok-ctf-1234-admin}

这不是摩斯密码

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++[- >---< ]>--- .---- .<+++ ++++[ ->--- ----<
]>--- ----- ----- .<+++ ++++[ ->+++ ++++< ]>+++ ++.<+ +++++ +[->- -----
-<]>. <++++ ++++[ ->+++ +++++ <]>++ .<+++ [->-- -<]>- ----. <++++ +++[-
>---- ---<] >---- ----. +++++ +..++ +++.+ .<+++ [->-- -<]>- --.<+ +++++
+[->+ +++++ +<]>+ ++.++ +.+++ +++++ +.--- -.+++ ++.<+ ++[-> +++<] >++++
++.<

brainfuck编码
flag{ok-c2tf-3389-admin}

简单加密

e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA

长度52,最后两位相同,应该是base64和移位

>>> a="e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA"
>>> ord('A')-ord('=')
4
>>> b=""
>>> for i in range(0,len(a)):
...     b+=chr(ord(a[i])-4)
... 
>>> b
'a2V5ezY4NzQzMDAwNjUwMTczMjMwZTRhNThlZTE1M2M2OGU4fQ=='
>>> import base64
>>> base64.b64decode(b)
'key{68743000650173230e4a58ee153c68e8}'

散乱的密文

lf5{ag024c483549d7fd@@1}
一张纸条上凌乱的写着2 1 6 5 3 4

看了下,依稀可以看到flag23333

2   1   6   5   3   4

l   f   5   {   a   g
0   2   4   c   4   8   
3   5   4   9   d   7
f   d   @   @   1   }

每行按数字的顺序读一下就行
flag{52048c453d794df1},这里的@只是为了凑倍数

凯撒部长的奖励

MSW{byly_Cm_sIol_lYqUlx_yhdIs_Cn_Wuymul_il_wuff_bcg_pCwnIl_cm_u_Yrwyffyhn_guh_cz_sio_quhn_ni_ayn_bcm_chzilguncihm_sio_wuh_dich_om}

凯撒,不用多说
SYC{here_Is_yOur_rEwArd_enjOy_It_Caesar_or_call_him_vIctOr_is_a_Excellent_man_if_you_want_to_get_his_informations_you_can_join_us}

一段base64

真的太长了,所以只贴部分密文

XDEzNFwxNzBcNjVcMTQzXDEzNFwxNzBcNjdcNjVcMTM0XDE3MFw2M1w2MFwxMzRcMTcwXDYzXDYwXDEzNFwxNzBcNjNcNjVcMTM0XDE3MFw2M1w2M1wxMzRcMTcwXDY1XDE0M1wxMzRcMTcwXDY3XDY1XDEzNFwxNzBcNjNcNjBcMTM0XDE3MFw2M1w2MFwxMzRcMTcwXDYzXDY3XDEzNFwxNzBcNjNcNjRcMTM0XDE3MFw2NVwxNDNcMTM0XDE3MFw2N1w2NVwxMzRcMTcwXDYzXDYwXDEzNFwxNzBcNjNcNjBcMTM0XDE3MFw2M1w2N1wxMzRcMTcwXDYzXDYyXDEzNFwxNzBcNjVcMTQzXDEzNFwxNzBcNjdcNjVcMTM0XDE3MFw2M1w2MFwxMzRcMTcwXDYzXDYwXDEzNFwxNzBcNjNcNjZcMTM0XDE3MFw2M1w3MVwxMzRcMTcwXDY1XDE0M1wxMzRcMTcwXDY3XDY1XDEzNFwxNzBcNjNcNjBcMTM0XDE3MFw2M1w2MFwxMzRcMTcwXDYzXDY2XDEzNFwxNzBcNjZcNjVcMTM0XDE3MFw2NVwxNDNcMTM0XDE3MFw2N1w2NVwxMzRcMTcwXDYzXDYwXDEzNFwxNzBcNjNcNjBcMTM0XDE3MFw2M1w2NlwxMzRcMTcwXDYzXDY3XDEzNFwxNzBcNjVcMTQzXDEzNFwxNzBcNjdcNjVcMTM0XDE3MFw2M1w2MFwxMzRcMTcwXDYzXDYwXDEzNFwxNzBcNjNcNjJcMTM0XDE3MFw2Nlw2NVwxMzRcMTcwXDY1XDE0M1wxMzRcMTcwXDY3XDY1XDEzNFwxNzBcNjNcNjBcMTM0XDE3MFw2M1w2MFwxMzRcMTcwXDYzXDY2XDEzNFwxNzBcNjNcNjZcMTM0XDE3MFw2NVwxNDNcM

先base64解密看下

\134\170\65\143\134\170\67\65\134\170\63\60\134\170\63\60\134\170\63\65\134\170\63\63\134\170\65\143\134\170\67\65\134\170\63\60\134\170\63\60\134\170\63\67\134\170\63\64\134\170\65\143\134\170\67\65\134\170\63\60\134\170\63\60\134\170\63\67\134\170\63\62\134\170\65\143\134\170\67\65\134\170\63\60\134\170\63\60\134\170\63\66\134\170\63\71\134\170\65\143\134\170\67\65\134\170\63\60\134\170\63\60\134\170\63\66\134\170\66\65\134\170\65\143\134\170\67\65\134\170\63\60\134\170\63\60\134\170\63\66\134\170\63\67\134\170\65\143\134\170\67\65\134\170\63\60\134\170\63\60\134\170\63\62\134\170\66

转成16进制

\x5c\x75\x30\x30\x35\x33\x5c\x75\x30\x30\x37\x34\x5c\x75\x30\x30\x37\x32\x5c\x75\x30\x30\x36\x39\x5c\x75\x30\x30\x36\x65\x5c\x75\x30\x30\x36\x37\x5c\x75\x30\x30\x32\x65\x5c\x75\x30\x30\x36\x36\x5c\x75\x30\x30\x37\x32\x5c\x75\x30\x30\x36\x66\x5c

转成中文字符

\u0053\u0074\u0072\u0069\u006e\u0067\u002e\u0066\u0072\u006f\u006d\u0043\u0068\u0061\u0072\u0043\u006f\u0064\u0065\u0028\u0033\u0038\u002c\u0033\u0035\u002c\u0031\u0032\u0030\u002c\u0035\u0030\u002c\u0035\u0034\u002c\u0035\u0039\u002c\u0033\u0038\u002c\u0033\u0035\u002c

escape编码

String.fromCharCode(38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,49,59,38,35,120,51,48,59,38,35,120,51,50,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,49,59,38,35,120,51,48,59,38,35,120,51,56,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,57,59,38,35,120,51,55,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,49,59,38,35,120,51,48,59,38,35,120,51,51,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,51,59,38,35,120,51,55,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,53,59,38,35,120,51,53,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,54,59,38,35,120,51,54,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,57,59,38,35,120,51,57,59,38,35,120,51,98,59,38,35,120,50,54,59,38,35,120,50,51,59,38,35,120,51,49,59,

括号里的转成文本

&#x26;#102;&#108;&#97;&#103;&#37;&#55;&#66;&#99;&#116;&#102;&#95;&#116;&#102;&#99;&#50;&#48;&#49;&#55;&#49;&#55;&#113;&#119;&#101;&#37;&#55;&#68;

以上是16进制的html实体
decode html

&#102;lag%7Bctf_tfc201717qwe%7D

以上是十进制的html实体
再次decode html
flag%7Bctf_tfc201717qwe%7D
url编码
flag{ctf_tfc201717qwe}

.?!

..... ..... ..... ..... !?!!. ?.... ..... ..... ..... .?.?! .?... .!...
..... ..... !.?.. ..... !?!!. ?!!!! !!?.? !.?!! !!!.. ..... ..... .!.?.
..... ...!? !!.?. ..... ..?.? !.?.. ..... .!.?. ..... ..... !?!!. ?!!!!
!!!!! !?.?! .?!.? ..... ....! ?!!.? ..... ...?. ?!.?. ..... !.?.. .....
!?!!. ?!!!! !!?.? !.?!! !!!!! !!!!. ..... ...!. ?.... ...!? !!.?. .....
?.?!. ?..!. ?.... ..... !?!!. ?!!!! !!!!? .?!.? !!!!! !!!!! !!!.? .....
..!?! !.?.. ....? .?!.? ....! .!!!. !!!!! !!!!! !!!!! !!.?. ..... .!?!!
.?... ...?. ?!.?. ..... !.!!! !!!!! !.?.. ..... ..!?! !.?.. ..... .?.?!
.?... ..... !.?.

还是ook
flag{bugku_jiami}

+[]-

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<
++++[ ->+++ +<]>+ +++.< +++++ [->-- ---<] >.<++ ++[-> ++++< ]>+++ .<+++
[->-- -<]>- ----. ++++. <+++[ ->+++ <]>+. <++++ [->-- --<]> ----- -.<++
+[->+ ++<]> ++.-. ----- ---.< +++[- >+++< ]>+++ .---- .<+++ [->-- -<]>-
.<+++ +++[- >---- --<]> ----- ----. +.<++ +++++ +[->+ +++++ ++<]> +++++
+++++ .<

brainfuck
flag{bugku_jiami_23}

奇怪的密码

gndk€rlqhmtkwwp}z

对比一下gdnk和flag,分别差了1 2 3 4

a = list("gndk€rlqhmtkwwp}z")
for i in range(0,len(a)):
    a[i]=chr(ord(a[i])-i-1))
s= ""
s.join(a)

结果:
flag₧lei_ci_jiami
有点不太对,提交的答案是flag{lei_ci_jiami}

托马斯.杰斐逊

1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
2: <KPBELNACZDTRXMJQOYHGVSFUWI <
3: <BDMAIZVRNSJUWFHTEQGYXPLOCK <
4: <RPLNDVHGFCUKTEBSXQYIZMJWAO <
5: <IHFRLABEUOTSGJVDKCPMNZQWXY <
6: <AMKGHIWPNYCJBFZDRUSLOQXVET <
7: <GWTHSPYBXIZULVKMRAFDCEONJQ <
8: <NOZUTWDCVRJLXKISEFAPMYGHBQ <
9: <QWATDSRFHENYVUBMCOIKZGJXPL <
10: <WABMCXPLTDSRJQZGOIKFHENYVU <
11: <XPLTDAOIKFZGHENYSRUBMCQWVJ <
12: <TDSWAYXPLVUBOIKZGJRFHENMCQ <
13: <BMCSRFHLTDENQWAOXPYVUIKZGJ <
14: <XPHKZGJTDSENYVUBMLAOIRFCQW <

密钥: 2,5,1,3,6,4,9,7,8,14,10,13,11,12

密文:HCBTSXWCRQGLES

托马斯杰斐逊 转轮加密
先按照秘钥改下顺序

2: <KPBELNACZDTRXMJQOYHGVSFUWI <
5: <IHFRLABEUOTSGJVDKCPMNZQWXY <
1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
3: <BDMAIZVRNSJUWFHTEQGYXPLOCK <
6: <AMKGHIWPNYCJBFZDRUSLOQXVET <
4: <RPLNDVHGFCUKTEBSXQYIZMJWAO <
9: <QWATDSRFHENYVUBMCOIKZGJXPL <
7: <GWTHSPYBXIZULVKMRAFDCEONJQ <
8: <NOZUTWDCVRJLXKISEFAPMYGHBQ <
14: <XPHKZGJTDSENYVUBMLAOIRFCQW <
10: <WABMCXPLTDSRJQZGOIKFHENYVU <
13: <BMCSRFHLTDENQWAOXPYVUIKZGJ <
11: <XPLTDAOIKFZGHENYSRUBMCQWVJ <
12: <TDSWAYXPLVUBOIKZGJRFHENMCQ <

然后按照密文转一转

HGVSFUWIKPBELNACZDTRXMJQOY
CPMNZQWXYIHFRLABEUOTSGJVDK
BVIQHKYPNTCRMOSFEZWAXJGDLU
TEQGYXPLOCKBDMAIZVRNSJUWFH
SLOQXVETAMKGHIWPNYCJBFZDRU
XQYIZMJWAORPLNDVHGFCUKTEBS
WATDSRFHENYVUBMCOIKZGJXPLQ
CEONJQGWTHSPYBXIZULVKMRAFD
RJLXKISEFAPMYGHBQNOZUTWDCV
QWXPHKZGJTDSENYVUBMLAOIRFC
GOIKFHENYVUWABMCXPLTDSRJQZ
LTDENQWAOXPYVUIKZGJBMCSRFH
ENYSRUBMCQWVJXPLTDAOIKFZGH
SWAYXPLVUBOIKZGJRFHENMCQTD

竖着看下内容即可
flag{xsxsbugkuadmin}

zip伪加密

不用多说,改下标准位或者用winrar修复下
flag{Adm1N-B2G-kU-SZIP}

告诉你个秘密

636A56355279427363446C4A49454A7154534230526D684356445A31614342354E326C4B4946467A5769426961453067

十六进制无疑

>>> a = "636A56355279427363446C4A49454A7154534230526D684356445A31614342354E326C4B4946467A5769426961453067"
>>> s=""
>>> for i in range(0,len(a)/2):
...     s+=chr(eval("0x"+a[2*i:2*i+2]))
... 
>>> s
'cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g'

flag{cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g}

这不是md5

同上
flag{ae73587ba56baef5}

贝斯家族

@iH<,{bdR2H;i6*Tm,Wx2izpx2!

base居然有这么多,顺便梳理下:

  • base16:16进制的0-F组成
  • base32:26个大写字母加2、3、4、5、6、7
  • base36:26个小写字母,10个数字
  • base58:base62中去掉0,I,O,l
  • base62:52个字母,10个数字
  • base64:52个字母,10个数字,+、/
  • base85、91、92

试下最后三个,是base91:
flag{554a5058c9021c76}

富强民主

公正公正公正诚信文明公正民主公正法治法治友善平等和谐敬业和谐富强和谐富强和谐文明和谐平等公正公正和谐法治公正公正公正文明和谐民主和谐敬业和谐平等和谐敬业和谐敬业和谐和谐和谐公正法治友善法治

核心价值观编码
flag{90025f7fb1959936}

python{N1CTF}

给了两个文件

from N1ES import N1ES
import base64
key = "wxy191iss00000000000cute"
n1es = N1ES(key)
flag = "N1CTF{*****************************************}"
cipher = n1es.encrypt(flag)
print base64.b64encode(cipher)  # HRlgC2ReHW1/WRk2DikfNBo1dl1XZBJrRR9qECMNOjNHDktBJSxcI1hZIz07YjVx

# -*- coding: utf-8 -*-
def round_add(a, b):
    f = lambda x, y: x + y - 2 * (x & y)
    res = ''
    for i in range(len(a)):
        res += chr(f(ord(a[i]), ord(b[i])))
    return res

def permutate(table, block):
	return list(map(lambda x: block[x], table))

def string_to_bits(data):
    data = [ord(c) for c in data]
    l = len(data) * 8
    result = [0] * l
    pos = 0
    for ch in data:
        for i in range(0,8):
            result[(pos<<3)+i] = (ch>>i) & 1
        pos += 1
    return result

s_box = [54, 132, 138, 83, 16, 73, 187, 84, 146, 30, 95, 21, 148, 63, 65, 189, 188, 151, 72, 161, 116, 63, 161, 91, 37, 24, 126, 107, 87, 30, 117, 185, 98, 90, 0, 42, 140, 70, 86, 0, 42, 150, 54, 22, 144, 153, 36, 90, 149, 54, 156, 8, 59, 40, 110, 56,1, 84, 103, 22, 65, 17, 190, 41, 99, 151, 119, 124, 68, 17, 166, 125, 95, 65, 105, 133, 49, 19, 138, 29, 110, 7, 81, 134, 70, 87, 180, 78, 175, 108, 26, 121, 74, 29, 68, 162, 142, 177, 143, 86, 129, 101, 117, 41, 57, 34, 177, 103, 61, 135, 191, 74, 69, 147, 90, 49, 135, 124, 106, 19, 89, 38, 21, 41, 17, 155, 83, 38, 159, 179, 19, 157, 68, 105, 151, 166, 171, 122, 179, 114, 52, 183, 89, 107, 113, 65, 161, 141, 18, 121, 95, 4, 95, 101, 81, 156, 17, 190, 38, 84, 9, 171, 180, 59, 45, 15, 34, 89, 75, 164, 190, 140, 6, 41, 188, 77, 165, 105, 5, 107, 31, 183, 107, 141, 66, 63, 10, 9, 125, 50, 2, 153, 156, 162, 186, 76, 158, 153, 117, 9, 77, 156, 11, 145, 12, 169, 52, 57, 161, 7, 158, 110, 191, 43, 82, 186, 49, 102, 166, 31, 41, 5, 189, 27]

def generate(o):
    k = permutate(s_box,o)
    b = []
    for i in range(0, len(k), 7):
        b.append(k[i:i+7] + [1])
    c = []
    for i in range(32):
		pos = 0
		x = 0
		for j in b[i]:
			x += (j<<pos)
			pos += 1
		c.append((0x10001**x) % (0x7f))
    return c



class N1ES:
    def __init__(self, key):
        if (len(key) != 24 or isinstance(key, bytes) == False ):
            raise Exception("key must be 24 bytes long")
        self.key = key
        self.gen_subkey()

    def gen_subkey(self):
        o = string_to_bits(self.key)
        k = []
        for i in range(8):
	        o = generate(o)
        	k.extend(o)
        	o = string_to_bits([chr(c) for c in o[0:24]])
        self.Kn = []
        for i in range(32):
            self.Kn.append(map(chr, k[i * 8: i * 8 + 8]))
        return 

    def encrypt(self, plaintext):
        if (len(plaintext) % 16 != 0 or isinstance(plaintext, bytes) == False):
            raise Exception("plaintext must be a multiple of 16 in length")
        res = ''
        for i in range(len(plaintext) / 16):
            block = plaintext[i * 16:(i + 1) * 16]
            L = block[:8]
            R = block[8:]
            for round_cnt in range(32):
                L, R = R, (round_add(L, self.Kn[round_cnt]))
            L, R = R, L
            res += L + R
        return res

看了下郁离歌大大的解法,是对密文多次加密

from N1ES import N1ES
import base64
key = "wxy191iss00000000000cute"
n1es = N1ES(key)
flag = "N1CTF{*****************************************}"
cipher = n1es.encrypt(flag)
print base64.b64encode(cipher)  # HRlgC2ReHW1/WRk2DikfNBo1dl1XZBJrRR9qECMNOjNHDktBJSxcI1hZIz07YjVx
t="HRlgC2ReHW1/WRk2DikfNBo1dl1XZBJrRR9qECMNOjNHDktBJSxcI1hZIz07YjVx"
t=base64.b64decode(t)
s = n1es.encrypt(t)
print s
for i in range(0,20):
        s=n1es.encrypt(s)
        print s

结果是N1CTF{F3istel_n3tw0rk_c4n_b3_ea5i1y_s0lv3d_/--/}

但是还是这个解答更加扎实2333
正规解法传送门

进制转换

d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e

二进制、十进制、八进制、十六进制

a="d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e"
a=a.split(" ")
s=""
for i in range(0,len(a)):
        tmp=""
        if(a[i][0]=='d'):
                tmp=eval(a[i][1:])
        else:
                tmp=eval('0'+a[i])
        s+=chr(tmp)
print s

flag{1e4bf81a6394de5abc005ac6e39a387b}

affine

y = 17x-8 flag{szzyfimhyzd}

仿射密码
flag{affineshift}

crack it

一个shadow文件,john下吧
flag{hellokitty}

rsa

N : 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597
e : 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619

enc : 38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192

题目给出了N,e,那就先分解N为两个大整数p和q,再利用e*d = 1 mod (p-1)*(q-1)求出d,最后再按rsa公式解出消息m。
使用RsaCtfTool
先用N和e建立一个pem文件

root@iZuf6j1f7a4m0e1301jsgdZ:~/RsaCtfTool# python RsaCtfTool.py --createpub -n 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597 -e 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619 > rsa.pem

然后求解私钥

root@iZuf6j1f7a4m0e1301jsgdZ:~/RsaCtfTool# python RsaCtfTool.py  --publickey rsa.pem --private > rsa.key

查看一下要的n,e,d,p,q

root@iZuf6j1f7a4m0e1301jsgdZ:~/RsaCtfTool# python RsaCtfTool.py --key rsa.key --dumpkey
[*] n: 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597
[*] e: 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619
[*] d: 8264667972294275017293339772371783322168822149471976834221082393409363691895
[*] p: 15991846970993213322072626901560749932686325766403404864023341810735319249066370916090640926219079368845510444031400322229147771682961132420481897362843199
[*] q: 28805791771260259486856902729020438686670354441296247148207862836064657849735343618207098163901787287368569768472521344635567334299356760080507454640207003

最后求一下消息m

n=460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597
d=8264667972294275017293339772371783322168822149471976834221082393409363691895
c=38230991316229399651823567590692301060044620412191737764632384680546256228451518238842965221394711848337832459443844446889468362154188214840736744657885858943810177675871991111466653158257191139605699916347308294995664530280816850482740530602254559123759121106338359220242637775919026933563326069449424391192
m=pow(c,d,n)
from libnum import n2s
print n2s(m)

结果是flag{Wien3r_4tt@ck_1s_3AsY}

来自宇宙的信号

标准银河字母,对比一下:
flag{nopqrst}

你可能感兴趣的:(ctf,Cryptography)