CTF--密码学笔记
来源:互联网 发布:怎么在知乎发软文 编辑:程序博客网 时间:2024/06/01 07:15
凯撒密码
for shift in range(26): str = r"YSMWGTZOGVWGTNGHAOB" new_str = '' for i in str: if i >= 'A' and i <= 'Z': # or i>='A'and i<='Z': i = ord(i) i = ((i + shift) - 97) % 26 + 97 i = chr(i) new_str = new_str + i print(new_str)
替代密码
http://quipqiup.com/
维吉尼亚加密
在凯撒密码基础之上的加密方式,添加了密钥的概念
例如明文:TO BE OR NOT TO BE THAT IS THE QUESTION
密钥: RELATIONS
加密过程如下:
Base64编码
base64是一种用64个字符来表示任意二进制数据的方法。(因为2的6次方为64)
base64编码要求把3个8位字节(3*8=24)转化为4个6位字节(4*6=24),之后在6位字节的前面补两个0,形成新的8位字节。如果剩下的字符不足3个字节,则用0填充,输出字符试用‘=’,因此编码后输出带文本末尾可能会出现一个或两个‘=’。
import base64print base64.b64decode('dGhpc2lzYW5hcHBsZQ==')print base64.b64encode('thisisanapple')
ascii码
ascii,是基于拉丁字母的一套电脑编码系统
对照表:http://tool.oschina.net/commons?type=4
print ord('a')print chr(97)
ROT13加密
rot13是一种简易的置换,将26个字母的前半部分与后半部分相互交换,如‘a’<=>’n’,’b’<==>’o’
def rot13(s, OffSet=13): def encodeCh(ch): f = lambda x: chr((ord(ch) - x + OffSet) % 26 + x) return f(97) if ch.islower() else (f(65) if ch.isupper() else ch) return ''.join(map(encodeCh, s))s = 'Hello!'print rot13(s) # Uryyb!print rot13(rot13(s)) # Hello!print rot13(s, 13) # Hello!
莫斯密码
http://www.zhongguosou.com/zonghe/moErSiCodeConverter.aspx
CODE = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.' }def main(): msg = raw_input('MESSAGE: ') for char in msg: if char == ' ': print else: print CODE[char.upper()] + ' ',if __name__ == "__main__": main()
手机按键
21表示a,22表示b,51表示j,依此类推。
当铺密码
这尼玛有什么蛋用?
矩阵加密
下图为5*5矩阵加密
11表示A,12表示B,依次类推。
栅栏加密
一般比较常见的是2栏的栅栏密码。
比如明文:THEREISACIPHER
两个一组,得到:TH ER EI SA CI PH ER
先取出第一个字母:TEESCPE
再取出第二个字母:HRIAIHR
连在一起就是加密的内容:TEESCPEHRIAIHR
而解密的时候,我们先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
希尔密码
#!/usr/bin/env python# -*- coding: utf-8 -*-from numpy.ma import array__Url__ = 'Http://www.purpleroc.com'__author__ = 'Tracy_梓朋'from numpy import *Dic = {chr(i+97):i for i in range(26)}def decode(pwd, org): temp = [] result = [] while True: if len(pwd) % 3 != 0: pwd.append(pwd[-1]) else: break for i in pwd: temp.append(Dic.get(i)) temp = array(temp) temp = temp.reshape(len(pwd)/3, 3) #print temp #print org xx = matrix(temp)*org for j in range(len(pwd)/3): for i in range(3): if (int(xx[j, i]) >= 26): result.append(chr(xx[j, i] % 26 + 97)) #print xx[j, i] % 26 else: #print xx[j, i] result.append(chr(xx[j, i] + 97)) return resultdef get_vmatrix(org): org_adjoin = org.I*linalg.det(org) print org_adjoin org_det = int(str(abs(linalg.det(org))).split('.')[0]) print org_det for i in range(1, 26): if i * org_det % 26 == 1: break org_mod = -org_adjoin * i % 26 org_mod = matrix(org_mod) temp = [] for i in range(org_mod.shape[0]): for j in range(org_mod.shape[1]): temp.append(int(str(org_mod[i, j]).split('.')[0])) org_final = matrix(temp).reshape(org_mod.shape[0], org_mod.shape[1]) #print org_final return org_finalif __name__ == '__main__': ''' for test pwd = list("act") org = matrix(array([[6, 24, 1], [13 , 16, 10], [20, 17, 15]])) result = decode(pwd, org) print "".join(result) deorg = matrix(array([[8, 5, 10], [21 , 8, 21], [21, 12, 8]])) result = decode(result, deorg) print "".join(result) ''' pwd = "wjamdbkdeibr" pwd = list(pwd) org = matrix(array([[1,2,3],[4,5,6],[7,8,10]])) org_vm = get_vmatrix(org) print org_vm print "Your flag is :" + "".join(decode(pwd, org_vm))
JSFuck
JSFuck 可以让你只用 6 个字符 !+ 来编写 JavaScript 程序。
http://www.jsfuck.com/
http://patriciopalladino.com/files/hieroglyphy/
培根密码
使用a和b或其他方式代表0和1的二进制
例如:密文是LOVE,采用大小写进行二进制的区分,并且采用“随意选取句子和文”加密,得到结果就是“SuIyI XuaNq uJUzi HEwEN”
CRC校验
CRC是为了保证数据的正确采用的一种检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。
import zlibdef crc32(st): crc = zlib.crc32(st) if crc > 0: return "%x" % (crc) else: return "%x" % (~crc ^ 0xffffffff)print crc32('20190804')
Brainfuck/Ook!
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
https://www.splitbrain.org/services/ook
猪圈密码/共济会密码
转义工具
http://tool.oschina.net/encode
- CTF--密码学笔记
- 【第一次CTF】密码学
- CTF密码学之JS
- CTF密码学之Decode
- CTF密码学之凯撒解密
- CTF笔记
- 西普实验吧密码学CTF--数码管
- 实验吧密码学CTF--chinese hacker
- 实验吧密码学CTF--chinese hacker
- ctf密码学——奇怪的短信
- 密码学笔记
- 密码学笔记
- 密码学笔记
- 密码学笔记
- 密码学笔记
- 密码学笔记1 密码学发展
- 西普实验吧密码学CTF--压缩的问题
- CTF密码学(Crypto)一些在线解密网站
- 湖南韶山毛泽东故居
- leetCode1(Two Sum)
- Java 多线程:InheritableThreadLocal 实现原理
- git push 提示Gtk-WARNING **: cannot open display:
- codeforces 750D New Year and Fireworks(DFS)
- CTF--密码学笔记
- Java中sleep()与wait()区别
- LinearLayout+Fragment实现下导航栏效果
- android studio连上小米手机后一直刷日志
- iOS将本应用添加在‘其他方式打开’的列表中
- 基础知识总结
- 设置QQ空间评论回复权限,包括日志、相册、说说、留言板的评论回复和留言权限,限制名单成员无评论回复权限
- Sql Server exists 查询相同姓名或编号 年份最大的一条数据
- Ember.js API (v2.11.0) 翻译 ---004.Routing---002---Defining Your Routes Edit Page(定义你的路由)