密码学入门,我们介绍一些简单的密码
brainfuck
这是一个完备的图灵语言
Brainfuck
基于这样一台机器。它具有一列初始化为0的数组(数组长度最初要求是30,000,但这个标准不是必要的)和一个初始指向第一个元素的指针。
该语言总共只有8个命令,除此之外所有其他字符都会被忽略
1 | ><+-.,[] |
所以看到了这八个字符组成的,就是brainfuck
命令 | 功能 | C语言 |
---|---|---|
> | 指针右移一个元素 | p++; |
< | 指针左移一个元素 | p–; |
+ | 指针当前所指元素加1 | *p++; |
- | 指针当前所指元素减1 | *p–; |
. | 输出指针所指元素对应字符 | putchar(*p); |
, | 输入字符的ASCII码值到指针所指元素 | *p=getchar(); |
[ | 若指针所指元素为0,则跳转到对应 | ‘]’处继续执行 while(*p){ |
] | 若指针所指元素不为0,则跳转至对应 | ‘[‘处继续执行 } |
其实说那么多,也不会自己动手算,让我们上工具
1 | ++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>++++++++++++++++++++++++++>++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>++++++.>----.<-----.>-----.>-----.<<<-.>>++..<.>.++++++.....------.<.>.<<<<<+++.>>>>+.<<<+++++++.>>>+.<<<-------.>>>-.<<<+.+++++++.--..>>>>---.-.<<<<-.+++.>>>>.<<<<-------.+.>>>>>++. |
来,告诉我flag
1 | flag{Oiiaioooooiai#b7c0b1866fe58e12} |
Caesar’s Secert 凯撒密码
凯撒密码,古老的密码
说白了就是字符偏移
给一个偏移量
所有的字符进行偏移
例如偏移量为1
,abc
进行偏移后,字符串为bcd
例如偏移量为2
,abc
进行偏移后,字符串为cde
例如偏移量为3
,abc
进行偏移后,字符串为def
这么说明白了吧
那么上工具 Caesar
1 | kqfl{hf3x4w'x_h1umjw_n5_a4wd_3fed} |
给我flag
1 | flag{ca3s4r's_c1pher_i5_v4ry_3azy} |
栅格密码
栅格密码更简单了,一般都是2的倍数,,因为他要分两层
比如加密字符串为acbd
将它沿中间拆开,则为
1 | a c |
上下交替合并,解密结果为abcd
321,上链接,栅格密码
1 | fa{ereigtepanet6680}lgrodrn_h_litx#8fc3 |
等一个flag
1 | flag{reordering_the_plaintext#686f8c03}@ |
维吉尼亚密码
维吉尼亚密码是一个多字母替代密码。
维吉尼亚密码是一种简单的多表代换密码(由26个类似的Caesar密码的代换表组成),
即由一些偏移量不同的恺撒密码组成,这些代换在一起组成了密钥。
维吉尼亚加密原理
核心:为了掩盖字母使用中暴露的频率特征,解决的办法就是用多套符号代替原来的文字。
密码对照表如下图
密钥中的字母为行,明文中的字母为列。
所以关键是找key
key
怎么来呢?
找密文中相同字符之间的间隔,大概率就是密钥的倍数
那么我们再简单一点
一些入门签到题,会给一点提示,例如下面这题
1 | pqcq{qc_m1kt4_njn_5slp0b_lkyacx_gcdy1ud4_g3nv5x0} |
其中pqcq
很明显是flag
我们可以得到kfck
k好像重复了,猜一下kfc
是密钥
得到原文
1 | flag{la_c1fr4_del_5ign0r_giovan_batt1st4_b3ll5s0} |
RSA解密
[CTF密码学]RSA相关题目解题方法与python脚本总结(附例题)
说简单一点
1 | n(两个大素数p、q的乘积) |
思路一
有n,我们要做的就是解出p和q