目录
古典密码
Wiki篇
二,凯撒密码Caesar:
三,移位密码
四,Atbash Cipher(埃特巴什码):
五,简单替换密码
六,仿射密码(affine cipher)
多表代换加密
一,Playfair
二,Polybius
三,Vigenere维吉尼亚密码
四,Nihilist
五,Hill
六,AutokeyCipher
群里网站篇
一,特点:明密文一 一对应。有一般两种方式破解: 1,密钥空间较小--暴力破解 2,密文足够长,词频分析, quipqiup - cryptoquip and cryptogram solver
特别地,密钥空间足够大,密文足够短,破解较为困难
原理:每个字母按字母表循环移动作密文 名称有:偏移量为10:Avocat(A→K A向右偏移10个位置到K)
偏移量为-5:Cassis(K 6)
偏移量为-6:Cassette(K 7)
偏移量为13:ROT13
(还有ROT5,ROT13,ROT18,ROT47)(ROT5移数字,ROT13移字母,ROT18为前两者混合,ROT47数字,字母,字符都移)
此外,Keyed Caesar 利用一个密钥,将密钥的每一位转换为数字(一般转换为字母表对应顺序的数字),分别以这一数字为密钥加密明文的每一位字母
eg: XMan 一期夏令营分享赛宫保鸡丁队 Crypto 100 :
密文:s0a6u3u1s0bv1a 数字(非字母)不移 字母移
密钥:guangtou 密钥字母所在位数为偏移量
偏移:6,20,0,13,6,19,14,20
明文:y0u6u3h1y0uj1u 密文对着字母表按偏移量得明文
工具: 一般我们有如下的工具,其中 JPK 比较通用。
1,JPK,可解带密钥与不带密钥(国外工具)
2,Online calculator: Caesar cipher (planetcalc.com)
3,ROT5、ROT13、ROT18、ROT47位移编码 (qqxiuzi.cn)
与凯撒密码类似,区别在于移位密码不仅会处理字母,还会处理数字和特殊字符,常用ASCII码表进行移位。其破解方法也是遍历所有的可能性来得到可能的结果(凯撒密码ROT47与其差不多)
原理:正常字母表倒过来就是密文字母表
明文: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
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
eg: ATTACK AT DAWN(明文)
ZGGZXP ZG WZDM (密文)
在线工具:实用密码学 (practicalcryptography.com)
它很简单,即便不知道是Atbash,也可以通过假设它是 替换密码并使用爬山确定密钥。Atbash 密码也是 a=25 和 b = 25 的仿射密码,因此将其作为仿射密码破解也是可行的。
原理:加密时,每一个明文字母替换为与之唯一对应且不同的字母,是完全混乱的(这区别于凯撒密码,难度高于凯撒密码)
Eg:
明文字母 : abcdefghijklmnopqrstuvwxyz
密钥字母 : phqgiumeaylnofdxjkrcvstzwb (对应规则)
明文:the quick brown fox jumps over the lazy dog
密文:cei jvaql hkdtf udz yvoxr dsik cei npbw gdm
解密时一般要知道每一个字母的对应规则,才可以正常解密
破解:
其加密方式使其所有的密钥个数为26,所以一般采用词频分析(要知道对应法则)
工具:quipqiup - cryptoquip and cryptogram solver
解密脚本:(7条消息) 仿射密码(原理+代码)_Eternal嘉的博客-CSDN博客_仿射密码
六,仿射密码(affine cipher)
解密脚本:(7条消息)仿射密码(原理+代码)_Eternal嘉的博客-CSDN博客_仿射密码
加密函数是 E(x)=(ax+b)(modm)E(x)=(ax+b)(modm)
解密函数是 D(x)=a−1(x−b)(modm)D(x)=a−1(x−b)(modm),其中 a−1 是 a 在 Zm 群的乘法逆元。 a的负一次方
from Crypto.Util.number import *
import libnum
import gmpy2
print(inverse(5,26))
print(libnum.invmod(5,26))
print(gmpy2.invert(5,26))
a,b不知,知道密文和部分明文,如下题:
仿射密码TWCTF 2016 的 super_express的解题脚本:
from Crypto.Util.number import *
encrypted = "805eed80cbbccb94c36413275780ec94a857dfec8da8ca94a8c313a8ccf9" #这个密文是需要给出的,wiki里好像没给
c = [int(encrypted[i:i+2],16) for i in range(0, len(encrypted), 2)]#转化成十进制
print(c) #[128, 94, 237, 128, 203, 188, 203, 148, 195, 100, 19, 39, 87, 128, 236, 148, 168, 87, 223, 236, 141, 168, 202, 148, 168, 195, 19, 168, 204, 249]
print(ord("T"),ord("W")) # 84 87
#128=(a*84+b)%251
#94=(a*87+b)%251
#两式相减34=(-3*a)%251 34=-3a+251k 3a=251k-34 k=1时不成立,k=2成立算出a=156
a=inverse(-3,251)*34%251 #简便方法就是求逆元 #*34还是没懂
print(a)
#128=(156*84+b)%251 #E(x)=(ax+b)mod m
#b=251k-156*84+128
#for i in range(100): # 爆破求b
# b=251*i-156*84+128
# if b>0 and b<251:
# print(b) # 76
b=(128-156*84)%251 # 好像不用爆破,直接这么算
print(b)
# a=156
# b=76
# #根据公式 D(x)=a−1(x−b)(modm)
a_1=inverse(a,251) #乘法逆元
flag=""
for i in c:
flag+=chr(a_1*(i-b)%251) ##chr
print(flag)
#运行结果:
#[128, 94, 237, 128, 203, 188, 203, 148, 195, 100, 19, 39, 87, 128, 236, 148, 168, 87, 223, 236, 141, 168, 202, 148, 168, 195, 19, 168, 204, 249]
#84 87
#156
#76
#TWCTF{Faster_Than_Shinkansen!}
#还不是很懂,或者说很多东西还没懂,需要经常复现,常来看看
原理:
以 playfair example 为密匙,得
P L A Y F I R E X M B C D G H K N O Q S T U V W Z
要加密的讯息为 Hide the gold in the tree stump
HI DE TH EG OL DI NT HE TR EX ES TU MP 明文
就会得到
BM OD ZB XD NA BE KU DM UI XM MO UV IF 密文
如果给的密文,密钥,根据原理翻回去即可
原理:Polybius密码又称棋盘密码,其一般是将给定的明文加密为两两组合的数字
两张图表:
eg:明文HELLO,加密后为 23 15 31 31 34
eg:明文HELLO,加密后为DD XF AG AG DF
(注意:ADFGX的字母表是打乱的)
还有各种各样的棋盘表,具体情况具体分析,总体是5*5的形式,i和j可视为同一字,加密时读取先左再上
最上一行是明文,最左一列是密钥,里面的是密文
eg:明文:come greatwall
密钥:crypto
密文:efkt zfgrrltzn
工具
原理:又称关键字密码:明文+关键字=密文。以关键字 helloworld 为例
首先利用密钥构造棋盘矩阵(类似 Polybius 密码) - 新建一个 5 × 5 矩阵 - 将字符不重复地依次填入矩阵 - 剩下部分按字母顺序填入 - 字母 i 和 j 等价
eg:a加密为23,s加密为44
其密文特点如下:
原理:其又称自动密钥密码,与维吉尼亚密码类似,但它是使用不同的方法生成密钥。所以比维吉尼亚密码更安全,自动密钥密码主要有两种:关键词自动密钥密码和原文自动密钥密码。以下是关键词自动密钥密码:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
关键词:CULTURE
自动生成密钥:CULTURE THE QUICK BROWN FOX JUMPS OVER THE
接下来的加密过程和维吉尼亚密码类似,从相应的表格可得(这表格我们应该是不知道的,因为关键词不定):
密文:VBP JOZGD IVEQV HYY AIICX CSNL FWW ZVDP WVK
工具:
已知关键词: 1,AutoKey Cipher - 许愿星
2,软件解:CaptfEncoder 一款可扩展跨平台网络安全工具套件CaptfEncoder_是叶十三的博客-CSDN博客
3,Python代码:
from pycipher import Autokey print (Autokey('CULTURE').encipher('THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG')) #加密 print (Autokey('CULTURE').decipher('VBP JOZGD IVEQV HYY AIICX CSNL FWW ZVDP WVK')) #解密
未知关键词:
1,栅栏密码:字母少,有一定规则,用@连接 //密文:fg2ivyo}l{2s3_o@aw_rcl@
2,md5:一般为32位,由字母和数字组成
顺便说一句,当ASCll用Base加密达不到所对应的位数的时候用=号补齐;
3,base64:其空格会被加密成= //若base64中有+,经url加密变成空格,base64解密字符不能含空格,报错(包含大写字母(A-Z),小写字母(a-z),数字(0-9)以及+ /)
4,base16:一串数字和大写字母组成 (Base16就是16进制,他的范围是数字(0-9),字母(ABCDEF))
5,base58:主要用于产生Bitcoin的钱包地址,不使用数字“0”,小写字母“l”,大写字母“O” “I”,符号“+” “/”
6,base91:91个字符(94个可打印中,三个没有: -(破折号,0x2D) \(反斜杠,0x5C) '(撇号,0x27))
eg:@iH<,{bdR2H;i6*Tm,Wx2izpx2! 可找在线解密工具
7,base32: Base32中只有大写字母(A-Z)和数字 234567
8,base58:原理: 在base64的基础上去掉了比较容易混淆的字符;(将冲突项都去掉)
Base58中不含Base64中的数字 0 ,大写字母 O ,小写字母 l ,大写字母 I ,以及 “+” 和 “/” 两个字符。
无法用整字节来转换表示Base58,所以开销会比64和16大得多,但是利于展示地址。
(base64在输出钱包地址的时候大小写字母等无法识别,引用base58)
9,base62:与base64差不多,少两个字符(“/” "空格") (在安全领域,base62的编码使用较多。)
10,base85:与Base64一样,Base85编码的目标是对二进制数据可打印的ASCII字符进行编码。但是它使用了更大的字符集,因此效率更高一些
11,base92
Base家族原理网址:
(7条消息) base家族学习__pain_的博客-CSDN博客_base92原理