其实只是一篇水文,只是想排一下部分坑
有错误希望可以在评论区提出来,别阴阳我就好了,tks。
首先要拿出来说的是base58
很多人初次遇见除base64 base32 base16以外的编码都会去直接搜索,如直接在百度搜索“base58编码”
然后第一个搜索出来的就是一个工具箱。
网站里面提到:
Base58是用于比特币(Bitcoin)中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。 相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。比特币的Base58字母表:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
是,讲的没有问题。也确实是比特币的字母表。你在使用cyberchef的时候也默认用的bitcoin。此外常用的还有Ripple的字母表。
但是在用一个工具箱的时候,很明显会发现编码出来的并不能用cyberchef解。
因为一个工具箱用的码表是短url的码表,即码表是123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
你可以在在线进制转换中也能见到他。所以一个工具箱虽然从开头到后面举例中都是在谈bitcoin,但他其实根本用的不是bitcoin使用的字母表。
前些天,我在水群的时候有人发了个红包题。啪的一下就点开了很快啊,把所有的base都试过了依旧不能解,出题人说是base92,使用的是bugku的工具加密的,大伙还是解不了。
这就奇怪了,难不成bugku的表也不正确吗?
这里我使用了python中的base92库,需要在py2使用。
import base92
print base92.encode('testbase92')
这是输出:[email protected]+J6B
拿到bugku解试试看呢?
暂时还没有出现问题。
那么众所周知,一些比赛喜欢把base套娃起来作为签到题,那么如果对明文进行10次base64,再进行5次base85,再用bugku的base92加密一次,得到的结果能被bugku解出来吗?这是base64+base85加密后的结果:
经过bugku的base92加密之后得到的一长串去解密的结果:
即使清掉了缓存也还是这个结果,那用python试试?
好嘛,还是不行。那用python的base92加密之后再去bugku解码呢?
结果是能解,那他们俩之间到底有什么不一样的地方?(s1为bugku加密,s2为python)
s1 = r'''>U.xN%a]xEZP*[Zp8[j)\/^Qn=IQ+y[2N%/P=,4N9rwZSR^A8\:px!eb"kq7k}G;EZQFU)]|@Lh(+rAv:$=B(+^%)#jt@*DA/R;LOV6X\!khWVFLv3(!J+@g^';a-/PoF,(#x63d2GF|6mn'O|>IGU3@I:0daM4ii_sH1)\2yPmWhRf[@@?R[;y0][KOpVi9]6/jw696l5)s|+B+ADt`4D3\I/3@JSXj!:CtOsj3,.LAr'fRzK6'4;R)Z.LT--$LwDx$9?l/HxOgEn2F}-i<$Tr6HPVRo+YOo?W\ak;7pK9{/m=]b9_F'/3V=hb\\A@p5>6]VZv\K/fUW(Zg,=O^[sj-<.{mhY&URD4]2Za\g@qF)-,+e?\%*hTcg/CHtkmLpB*mOgAJin4u*O(y^]SPuHDsG4Py/V"}gPUmUL<)%i8X2ha>YZz'iQ'N3DI1GX)Q5V#O?.?MX%6o0Y;jYY$:Q}%\]v:_&xn)\Z"sWS@K+lImQwoI+V:4O6*UDY<0w.fzUd?bAooP4)=3`4,*^C@oy$U#3}Ik&;BhYXxASR&HS$A$k>w_\'OxV:(+6e<(G4,:0}P{?bC0RfK5&SN%5y:iiR%47&9?05Sk/).HQFVT$x'^3t/R$(AAu3b%sYHcvEdTn-,>}17`lsYbt$BUUpmP)Mf`3]Pc'.e?sRedVIk'DR!Z_K'VtBlRW=rkCn81C[Wj=@*A}-c%&a-Xt$0temhj)JST1:<0=VgM,k}?Q.J=kVG[e/tWi(saf72t,6,1RFB[iCX13EYJ'''
s2 = r'''>U.xN%a]xEZP*[Zp8[j)\/^Qn=IQ+y[2N%/P=,4N9rwZSR^A8\:px!eb!kq7k}G;EZQFU)]|@Lh(+rAv:$=B(+^%)#jt@*DA/R;LOV6X\!khWVFLv3(!J+@g^';a-/PoF,(#x63d2GF|6mn'O|>IGU3@I:0daM4ii_sH1)\2yPmWhRf[@@?R[;y0][KOpVi9]6/jw696l5)s|+B+ADt_4D3\I/3@JSXj!:CtOsj3,.LAr'fRzK6'4;R)Z.LT--$LwDx$9?l/HxOgEn2F}-i<$Tr6HPVRo+YOo?W\ak;7pK9{/m=]b9_F'/3V=hb\\A@p5>6]VZv\K/fUW(Zg,=O^[sj-<.{mhY&URD4]2Za\g@qF)-,+e?\%*hTcg/CHtkmLpB*mOgAJin4u*O(y^]SPuHDsG4Py/V!}gPUmUL<)%i8X2ha>YZz'iQ'N3DI1GX)Q5V#O?.?MX%6o0Y;jYY$:Q}%\]v:_&xn)\Z!sWS@K+lImQwoI+V:4O6*UDY<0w.fzUd?bAooP4)=3_4,*^C@oy$U#3}Ik&;BhYXxASR&HS$A$k>w_\'OxV:(+6e<(G4,:0}P{?bC0RfK5&SN%5y:iiR%47&9?05Sk/).HQFVT$x'^3t/R$(AAu3b%sYHcvEdTn-,>}17_lsYbt$BUUpmP)Mf_3]Pc'.e?sRedVIk'DR!Z_K'VtBlRW=rkCn81C[Wj=@*A}-c%&a-Xt$0temhj)JST1:<0=VgM,k}?Q.J=kVG[e/tWi(saf72t,6,1RFB[iCX13EYJ'''
print("s1 len",len(s1),"\t\ts2 len",len(s2))
for i in range(len(s1)):
if(s1[i] != s2[i]):
print(i)
可以发现,虽然他们长度一样,但是有些地方字母就是不一样,输出看看?
bugku中的"对应python的!,bugku的`对应python的_
那奇怪了,难道bugku的表对应有问题吗?
因为看不到具体过程,这里就不继续研究和下结论了。总之在生成的时候请尽量使用base92库。
就简单说一下,有些平台的base62解出来是一长串数字,是因为他的base62是指的进制转换。同样可以用base58里面提到的进制转换来转。而一般打CTF说的base62是指的base62编码,即是用62个可打印字符来表示二进制数据。这里还是推荐cyberchef。
此外国外有个平台http://decode-base62.nichabi.com/他使用的base62是自己自创的,采用分组加的方式。
这边建议还是多记住不同平台的避免找不到出题人使用的。毕竟加密是为了好朋友之间互相***
,咱就是个中间hacker去拿他信息。
这个问题还算是比较常见的问题,在我去年2月bugku出的题、国外的某场比赛、bamboofox、国内某两场比赛中,都是遇到过这个问题,这是典型的因为最高位为0所以省略掉的。最常见的还是我之前提到的进制转换,他在除最高位以外的地方都是老老实实的8bit,而最高的那里就是没有开头那个0。所以建议如果要用在线网站去转换可以使用cyberchef,总之就是推荐cyberchef。
我不好说,首先是常见的零宽有四个网站,可以去Tokeii的CTF站点导航找到。
其次有的出题人故意勾选了全部并不给提示,在使用vim查看的时候并不能看到所有
一般做题都是他有什么勾什么,要是这样还解不出来这边建议开摆(有时候python的零宽库也搞不出来)
大概就说这么多。睡觉了