Crypto入门
本文最后更新于 891 天前,其中的信息可能已经有所发展或是发生改变。

编码

与密码区别:过程可逆

HEX

from Cryoto.Util.number import *
flag="flag{123}"
print bytes_to_long(flag)
print long_to_bytes(bytes_to_long(flag))

Base家族

base64/32/16:基于64/32/16种Bytes表示所有bytes。

base64a-z A-Z 0-9 + / 共64个以及 =
base32A-Z 2-7 共32个以及 =
base160-9 A-F 共16个

ASCII码

XXencode

UUencode

Shellcode

shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制之机械码,以其经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机械码,让电脑可以执行攻击者的任意指令。

源于谷歌

shellcode编码为可执行文件,其中特征为以PYIIIIIIIIIIIIII7Q开头。

攻击:github 上下载 shellcodeexec 直接运行文件。

Unicode

为每种语言每个字符设定了统一并且唯一的二进制编码。

Escape/Unescape

又叫%u编码,采用UTP-16BE模式。

Escape编码/加密: 字符对应UTF-16 16进制表示方式前面加%u。

Unescape编码/解密: 去掉%u,将16进制还原,由utf-16转码。

HTML实体编码

字符实体名称实体编号
"" 
''
& &&
< &lt;&#60;
> &gt;&#62;

敲击码

对信息通过使用一系列的点集声音来编码而证明。

12345
1ABC/KDE
2FGHIJ
3LMNOP
4QRSTU
5VWXYZ

例子:O 位置 (3, 4) 敲击码为 … ….

莫斯电码

File:国际摩尔斯电码.svg

古典密码

m/p表示明文 K表示密钥 c表示密文。

移位密码

简单移位密码

明文根据k的长度分组,按照key值变换顺序。

曲路密码

明文填入一个表中,按照一定的顺序曲路遍历。

云影密码

只含01248四个数字,其中0用于分隔,其他数字做和之后转化为明文。

栅栏密码

密钥k表示栅栏长度。

遍历x(0-k):把要加密的明文分成k个一组,然后取每组第x个字符一次连接。

替代密码

替换表可以是单个或者多个。

单表替换

凯撒密码
埃特巴什码

通过将字母表的位置完全镜面对称后获得字符的替代表进行加密。

经典单表替代密码

完全没有任何顺序的替代。

培根密码

用两种不同的字体表示密文。

有正常的字也有斜体。

AAAAAAGAABBANABBAATBAABA
BAAAABHAABBBOABBABU/VBAABB
CAAABAI/JABAAAPABBBAWBABAA
DAAABBKABAABQABBBBXBABAB
EAABAALABABARBAAAAYBABBA
FAABABMABABBSBAAABXBABBB

http://rumkin.com/tools/cipher/baconian.php

象形替代密码

猪圈密码、跳舞的小人等。

JS编码

在谷歌控制台可以直接输出的编码。

典型的JSFxxk编码、颜文字编码等等。

一些烧包编码

与佛论禅,与熊论道等等。

仿射密码

替代表生成方式:

c=am+b mod n

其中m为明文对应字母得到数字,n为字符数量, c为密文。a,b 为密钥。

解密 m = modinv(a)(c-b) mod n。

多表替代

维吉尼亚密码

密钥根据位置而产生改变。

攻击方式

词频统计

https://quipqiup.com/

卡西斯基实验

三个相同的字母出现 :ABC

  • 不同明文,不同密钥:碰巧
  • 相同明文,相同密文:两个明文之间差为为密钥的长度的倍数。

分组密码

将明文分组(长度为n一组),分别进行加密。

  • ECB
  • CBC
  • CFB
  • OFB
  • CTR

攻击方式

CBC比特翻转攻击

已知明文攻击

明文分成两组进行加密。

  • Dec(C2)[i]=C1[i]^M2[2]
  • M2[i]=Dec(C2)[i]*C1[i]
  • X=Dec(C2)[i]^(C1[i]^X^M2[i])

在第一个分组对应位置上异或上X和M2[i]即可。

CBC选择密文攻击

明文每次加密前会和IV异或,IV每组会更新为上一组的密文。

  • 待解密的密文为:C|C时
  • Decrypt(C)^C=M1
  • Decrypt(C)^IV=M0
  • 综合得Decypt(C)^C^Decrypt(C)^IV=M1^M0
  • IV=M1^M0^C

如果能通过一个oracle或者其他方式得到C|C密文的话,就可以逆推IV。

Feistel结构

如果F是线性→实现已知明文攻击。

  • F()→Ki
  • L, R
  • R, L^R^K1
  • L^R^K1, L^K1^K2
  • L^K1^K2, R^K2^K3
  • ……

每一轮都是可推理的,而且每个内容均为L^R^固定的常数。

只要知道一组明密文对,就可以解密所有密文。

序列密码(流密码)

流密码是使用一个随时间变换的加密变换,一次加密一个明文的独立符号单位。

通常都是 PRNG(由种子产生随机数)。

Random Prediction 随机数预测。

通过预测部分算法上的随机数进行攻击。

level 0:Brute Seed

调用python中的time()获取本地时间。

攻击方法:time.time()打印时间。

level 1:Linear Congruential PRNG

lever 2:hardrpd

杂凑函数(哈希函数)

消息摘要:把消息或数据压缩成摘要,使数据量变小。

cmd5网站可以进行查询。

哈希长度扩展攻击

MAC消息验证码:用于验证消息真实性,而伪造MAC可以下载文件。

如果知道message和MAC,和key长度,就算不知道key的值,也能计算出MAC。

MD结构hash函数特点:消息填充方式——添加一个1,再添加0到448同余。长度 % 512 == 448。每一块得到的链接变量都会被作为下一次执行hash函数的初始向量IV。在最后一块的时候,才会将其对应的链接变量转化为hash值。

格式:message+padding+extension

哈希函数以区块为单位操作数据,消息被填充到区块长度整数倍。

计算扩展值的第一步是创建一个新的MAC。

攻击者的MAC=SHA1(extension+padding)←覆盖registers初始值。

hashpump。

哈希碰撞

构造两个内容不一样的param,使其哈希值MD5一致,都能正常运行程序,但是做到的事情完全不同。

攻击方式:把构造的txt拖到fastcoll上面,生产两个xxx开头的文件,把MD5文件提交,就可以拿到flag。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇