感谢丁神的总结博客链接
下面以加密下方flag为例
flag{QLNU_yyds!}
工具:base全家桶http://wiki.qlnuctf.cn/course/13/task/684/show
666C61677B514C4E555F79796473217D
MZWGCZ33KFGE4VK7PF4WI4ZBPU======
http://decode-base62.nichabi.com/?input
ZmxhZ3tRTE5VX3l5ZHMhfQ==
Ao(mgHVmI3
@iH<,{b*+6Gs1QejHEAL
F#S
base64 的乱序版
参考链接
import base64
import string
str1 = "x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q"
string1 = "ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))
str1是要解密的代码
string1是改过之后的base64表
利用cyberchef 工具也是可以的
需要密码,格式很像base,但是是以U2开头的
U2FsdGVkX1/SvkGkNmN/u52RqOQ=
啌亣捆咇凁攨mpm檯剤仯蝠蝰?
使用010解密即可
flag{we1c0me_t0_redhat2021}
例题:2021红帽-签到
eJxLy0lMr05KSTEwM0pOTrFMNk9ONkhJNjYwNDI3SLVMSbJMMk5NrgUA9cQMNg==
eJx开头的等号结尾的
网站解密:https://codebeautify.org/gzip-decompress-online
因为 jwt 分为三部分,之间通过点号分隔,前两部分就是 base64 编码的所以直接可以 base64 解码
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
辨别方法:eyJ
解密网站:https://jwt.io/
码表
abcdefghijklmnopqrstuvwxyz ,.
常见密钥为一个网址,比如
解密网址:http://www.atoolbox.net/Tool.php?Id=914
有1,2,4,8这四个数字,可以通过加法来用这四个数字表示0-9中的任何一个数字,列如0=28, 也就是0=2+8,同理7=124, 9=18。这样之后再用1-26来表示26个英文字母,就有了密文与明文之间的对应关系。引入0来作为间隔,以免出现混乱。所以云影密码又叫“01248密码”
#!/usr/bin/python
# -*- coding=utf8 -*-
"""
# @Author : pig
# @CreatedTime:2019-11-2423:54:02
# @Description : https://www.jianshu.com/p/b5aa5cf60f83
"""
def de_code(c):
dic = [chr(i) for i in range(ord("A"), ord("Z") + 1)]
flag = []
c2 = [i for i in c.split("0")]
for i in c2:
c3 = 0
for j in i:
c3 += int(j)
flag.append(dic[c3 - 1])
return flag
def encode(plaintext):
dic = [chr(i) for i in range(ord("A"), ord("Z") + 1)]
m = [i for i in plaintext]
tmp = [];flag = []
for i in range(len(m)):
for j in range(len(dic)):
if m[i] == dic[j]:
tmp.append(j + 1)
for i in tmp:
res = ""
if i >= 8:
res += int(i/8)*"8"
if i%8 >=4:
res += int(i%8/4)*"4"
if i%4 >=2:
res += int(i%4/2)*"2"
if i%2 >= 1:
res += int(i%2/1)*"1"
flag.append(res + "0")
print ("".join(flag)[:-1])
c = input("输入要解密的数字串:")
print (de_code(c))
m_code = input("请输入要加密的数字串:")
encode(m_code)
链接https://baike.baidu.com/item/PGP%E8%AF%8D%E6%B1%87%E8%A1%A8/22718129
Uuencode将输入资料以每三个字节为单位进行编码,如此重复进行。如果最后剩下的资料少于三个字节,不够的部份用零补齐,很像base64
特点:包含!”#¥%&‘()*+=’” 等等字符
Unicode 在一个字符集中包含了世界上所有文字和符号,统一编码,来终结不同编码产生乱码的问题
字符编码 UTF-8
Unicode 统一了所有字符的编码,是一个 Character Set,也就是字符集,字符集只是给所有的字符一个唯一编号,但是却没有规定如何存储
一个字符使用四个字节存储,也就是 32 位,这样就能涵盖现有 Unicode 包含的所有字符,这种编码方式叫做 UTF-32(UTF 是 UCS Transformation Format 的缩写)
在存储和网络传输中,通常使用更为节省空间的变长编码方式 UTF-8,UTF-8 代表 8 位一组表示 Unicode 字符的格式,使用 1 - 4 个字节来表示字符
U+ 0000 ~ U+ 007F: 0XXXXXXX
U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
可以看到,UTF-8 通过开头的标志位位数实现了变长。对于单字节字符,只占用一个字节,实现了向下兼容 ASCII,并且能和 UTF-32 一样,包含 Unicode 中的所有字符,又能有效减少存储传输过程中占用的空间
RTF格式下的unicode编码
明显特点:\u-65432?\u-65420
转换脚本
s=r"\u-65432?\u-65420?\u-65420?\u-65424?\u-65421?\u-65478?\u-65489?\u-65489?\u-65418?\u-65426?\u-65437?\u-65420?\u-65434?\u-65491"
l=list(s[3:-1].split(r"?\u-"))
flag=""
for i in l:
flag+=chr(65536-int(i))
print(flag)
自动密钥密码(Autokey Cipher)也是多表替换密码,与维吉尼亚密码密码类似,但使用不同的方法生成密钥。通常来说它要比维吉尼亚密码更安全。自动密钥密码主要有两种,关键词自动密钥密码和原文自动密钥密码
解密网站:https://www.wishingstarmoye.com/ctf/autokey
http://www.practicalcryptography.com/ciphers/autokey-cipher/
# python2 解码
from pycipher import Autokey
print Autokey('CULTURE').encipher('helloworld')
print Autokey('CULTURE').decipher('jyweinsypo')
工具下载:https://github.com/hitcxy/break_autokey
工具使用
需要安装pycipher库 pip2 install pycipher
修改break_autokey.py中的'ctext' 变量
python2 break_autokey.py
https://www.dcode.fr/
可以用这个网站
已下这些都是js,打开console运行一下就能得到flag
http://www.hiencode.com/brain.html
用六个不同的符号
- !+
构造出JS的所有类型
http://www.hiencode.com/jsfuck.html
**也称颜文字 **゚ω゚ノ= /`m´)ノ ~┻━┻ //´∇`/ [’_’]; o=(゚ー゚)
将JS代码转换成常用的网络表情
http://utf-8.jp/public/aaencode.html
demo地址
http://utf-8.jp/public/jjencode.html
jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编码方式。其中8个少量字符包括: ! + ( ) [ ] { } 。只用这些字符就能完成对任意字符串的编码。不同于jsfuck,它多了{}这两个大括号
解密工具 由于jother执行之后所得到的结果分为字符串和函数两种,所以解密的方法也不相同。
字符串:直接在Console界面中输入并回车即可
函数: 对于函数类型的jother加密结果,我们只需要将最后的()改成.toString()即可
ctf中js的总结
有关颜色的编程语言
更多查看https://www.jianshu.com/p/ed929cf72312
字和符号,统一编码,来终结不同编码产生乱码的问题