CTF入门学习笔记-密码学和编码

密码学

  1. 维吉尼亚密码:

在凯撒密码基础上的一种变体,只不过对于每个明文字母来说秘钥长度可能是不一样的

  1. 费纳姆密码:

采用二进制表示,加密时要将明文和秘钥都转换成7位二进制数,异或得到密文。解密将密文7个为一组,然后与秘钥异或,再讲结果转换成ascii

  1. 列置换加密:

  将明文按行填写在一个矩阵,然后按照预定的顺序按列读取得到密文。列置换的秘钥通常会以一个单词的形式给出,如nice(相当于4312)按照每个字符在字母表中出现的前后顺序来排列。秘钥有几位数解密采用的矩阵就是几列,加密时首先去除铭文中的空格,然后依次填入一个4列的矩阵的,最后一行不足的部分可以留空(或用@等符号补全),按照秘钥的顺序一次读取

  1. Polybius(波利比奥斯密码):

又称棋盘密码。将给定的密文加密为两两组合的数字。

 

比如,HELLO加密后是23 15 31 31 34

补充ADFGX密码:

可以看做是Polybius的升级版,用ADFGX代换了五个数字

  1. Brainfuck

它是一种极小化的计算机语言,按照"Turing complete(完整图灵机) "思想设计 的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语 言,只有八种符号,所有的操作都由这八种符号  > < + - . , [ ]  的组合来完成。

6.二进制幂数加密:

由于英文字母只有26个字母,由公式可知,只要2的0、1、2、3、4、5次幂就可以表示31个单元。通过用二进制幂数表示字母序号数来加密。4=2^2 所以D加密过之后是2;15=2^0+2^1+2^2+2^3所以O加密后是0123

7.仿射加密:

仿射加密则是将铭文与密钥的一部分相乘然后加上密钥的另一部分。为便于计算将26个英文字母用数字表示:a=0,b=1.....z=25密钥有两个:a和b,取值范围是[0,25]。要求a和26互质。比如x是明文y是密文,加密公式是y=(ax+b)mod26.a=7,b=3假设明文为c,x=2,y=17,密文就是r

8.培根密码:

是一种简单的替换密码,密文字符只有两个:a,b;每个明文资福都会被替换成为一个有a,b组成的长度为5的字符串。若看到全部铭文都是由两种字符构成的密文可以猜测其是培根密码。

9.轮转机加密:

杰斐逊轮转加密器,这个装置由36篇同样大小的木制转轮,套在一根铁杆上,没票轮转的圆周边缘上刻有乱序的26个英文字母表。驾麋芳转动加密器上的转轮使明文(不超过36字)正好出现在同一行上,这时转轮上排列的其他25行都是无意义的乱码,吧其中一行抄写下来得到密文。接收方街道密文转动加密器上的转轮使得密文正好出现再同一行,然后查看其他25行上的内容,其中有意义的就是铭文。

10.ROT13

凯撒密码的变体,间隔数是13.PHP中的str_rot13()函数可以实现rot13加密。

11.RSA攻击

分类:模数分解,低加密指数分解,低加密指数广播攻击,低解密指数攻击,共模攻击

 

m代表我们要加密的文明,c代表我们加密后的密文,p和q是我们随机找的大素数,n代表p和q的乘积称为模数,e是我们找到的和(p-1)(q-1)互质的数称为加密指数

 

12.当铺密码:

当前汉字有多少笔画出头,就转化成数字几。

如: 王夫 井工 夫口 由中人 井中 夫夫 由中大

转换为数字:67 84 70 123 82 77 125

13.Jjencode
jjencode 将 JS 代码转换成只有符号的字符串,类似于 rrencode。aaencode 可以将 JS 代码转换成常用的网络表情,也就是我们说的颜文字 js 加密

14.加盐hash

网站后台一般只储存用户密码的hash值,存在一定风险,因为如果黑客拿到了密码的hash后,可以的通过对比已经存在的明文与哈希的对应数据,进行对比获得明文密码。因此。加盐hash,就是随机的在用户密码后加上一段字符后再进行hash运算,由于黑客不知道加的盐是什么,依然无法得到密码。

编码

()base家族

Base16:就是十六进制数,0-9,A-F

Base32:小写字母,234567

Base64:将二进制数编码成字符,大小写字母,0-9+/,还可能会使用=作为后缀,但是=并不是必须的,只有编码后位数不是4的倍数的时候才会用=作为后缀

Base85:大小写字母,0-9和23个字符!&@#%()*+-;<=>_~{}|

在ASCII码表中,算上空格, 从32到126共95个是可见字符,不算上空格则为94个。也叫打印字符,即可以被直接打印出来的字符。剩下的则是不可见字符,即不可以被直接打印出来

()url编码

url编码(%加十六进制数)如果要传入的参数包含=或者&字符可以对其进行编码,URL编码格式:%十六进制ASCII码,如&的URL编码是%26。传输容易引起歧义的字符时需要编码。若在URL中对一些ascii标准字符进行了URL编码,浏览器会自动将其解码。如果在URL当中需要传输中文也必须要经过URL编码。+比较特殊,它在URL当中会被视为空格。URL 编码将字符转换为可通过因特网传输的格式。URL 只能使用 ASCII 字符集 通过因特网进行发送。由于 URL 通常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。URL 编码使用后跟十六进制数字的 "%" 替代不安全的 ASCII 字符。URL 不能包含空格。URL 编码通常使用加号(+)或 %20 替代空格。

Python3默认采用UnicodePython2默认采用ascii

(三):Unicode编码

Unicode编码包含世界所有文化、所有字符的编码方案。在不同的应用场合所采用的表示方法也不一样,常见的四种表示方法:&#[HEX], &#[DEC],\U[HEX],\U+[HEX].前两种主要用在网页上,可以直接放到HTML中解析

()UTF编码

Unicode只是对所有字符进行了编码但没有规定如何存储和传输。UTF编码即Unicode Transformation Format,Unicode的转换格式。UTF-8是一种可变唱的编码方式,用1-6个字节表示一个符号。英文字母被编码成一个字节,汉字通常是3个字节,生僻字才会被编码成4-6个字节。如果字节的第一位是0则这个字节单独就是一个字符,若第一个是1,连续有多少个1就表示当前字符占多少字节。当数据在计算机内存中被处理时,统一用Unicode,需要存到硬盘或者传输的时候需转换为utf-8

()jjencode aaencode

jjencode代码,就是将正常的js代码转换成复杂的只有符号的字符串编码,

进行加密 如:[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$这样的组合。

aaencode代码,则是将正常的js代码转为好玩的特殊网络表情符号。

如: ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) 这样的表情文字

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值