还在加载 请稍等一下辣ヾ(≧▽≦*)o . . .

CTF中常见密码学(二)


前言

第一篇文章👉CTF中常见的密码学(一)

一.维吉尼亚密码

1.加密

维吉尼亚密码就是一些偏移量不同的凯撒密码组成的,首先需要如下表。

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 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

假设密钥是TAKAGISAN,则对应上面👆表转换成数字密钥就是key=(19,0,10,0,6,8,18,0,13)

假设明文是TAKAGISAN IS THE FIRST IN THE WORLD,然后按照密钥分为九个一组,密钥数字排序如果不够,可以从头开始排序,如下表操作即可,假设下面对应的索引数字为a,密钥数字为b,那么加密之后的数字c就是(a+b)mod26取余数即可,最后在按照上表对应的数字排序即可得到密文。

明文 T A K A G I S A N I S T H E F I R S T I N T H E W O R L D
对应的索引数字 19 0 10 0 6 8 18 0 13 8 18 19 7 4 5 8 17 18 19 8 13 19 7 4 22 14 17 11 3
密钥数字 19 0 10 0 6 8 18 0 13 19 0 10 0 6 8 18 0 13 19 0 10 0 6 8 18 0 13 19 0
加密之后的数字 12 0 20 0 12 16 10 0 0 1 18 3 7 10 13 0 17 5 12 8 23 19 13 12 14 14 4 4 3
密文 M A U A M Q K A A B S D H K N A R F M I X T N M O O E E D

所以TAKAGISAN IS THE FIRST IN THE WORLD加密之后的密文是MAUAMQKAABSDHKNARFMIXTNMOOEED。公式就是(a+b)mod26=c


2.解密

假设已经知道了密钥是TAKAGISAN密钥是key=(19,0,10,0,6,8,18,0,13),公式是(c-b)mod26=a,也就是对应的索引数字减去密钥数字再来mod26即可,如下表。

密文 M A U A M Q K A A B S D H K N A R F M I X T N M O O E E D
对应的索引数字 12 0 20 0 12 16 10 0 0 1 18 3 7 10 13 0 17 5 12 8 23 19 13 12 14 14 4 4 3
密钥数字 19 0 10 0 6 8 18 0 13 19 0 10 0 6 8 18 0 13 19 0 10 0 6 8 18 0 13 19 0
解密之后的数字 19 0 10 0 6 8 18 0 13 8 18 19 7 4 5 8 17 18 19 8 13 19 7 4 22 14 17 11 3
明文 T A K A G I S A N I S T H E F I R S T I N T H E W O R L D

二.摩斯电码

当然也是字符对应字母,如下表

字母表

字符 电码符号 字符 电码符号 字符 电码符号 字符 电码符号
A .- B -… C -.-. D -..
E . F ..-. G –. H ….
I .. J .— K -.- L .-..
M N -. O P .–.
U ..- V …- W .– X -..-
Y -.– Z –..

标点符号

字符 电码符号 字符 电码符号 字符 电码符号 字符 电码符号
. .-.-.- : —… , –..– ; -.-.-.
? ..–.. = -…- .—- / -..-.
! -.-.– - -….- - ..–.- .-..-.
( -.–. ) -.–.- $ …-..- & ….
@ .–.-. + .-.-.

数字长码

字符 电码符号 字符 电码符号 字符 电码符号 字符 电码符号
0 —– 1 .—- 2 ..— 3 …–
4 ….- 5 ….. 6 -…. 7 –…
8 —.. 9 —-.

在线解密网址👉摩斯电码在线解密


三.MD5(哈希算法)

MD5不可逆,只能通过枚举,MD5的特征是,(1)长度固定,(2)只可能小写和数字32个字符👉在线CMD加密解密,比如加密123456,如下。

MD5:e10adc3949ba59abbe56e057f20f883e


四.猪圈密码

用格子来做的简单替换,加密,如下图格子适应,和对应图。

如下是字母对应图👇。

按照图表来加密解密即可。


五.九宫格按键加密

也是简单的替换密码,如下表替换。

1 2 abc 3 def
4 ghi 5 jkl 6 mno
7 pqrs 8 tuv 9 wxyz

没有1,比如a在第二个格子那么就是21z在第9个格子就是94k在第五个格子就是52


六.26键加密

1.QWE密码

指的是按照QWE键盘顺序来加密也就是QWERTYUIOP这种,如下表所示。

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
Q W E R T Y U I O P A S D F G H J K L Z X C V B N M

入👆表加密即可。

2.坐标加密

先如下图所示,如果是(红色,黄色)也就是先行后列的顺序,(1,1)=Q,(1,2)=W,(2,1)=A,(2,2)=S

如果是(黄色,红色)也就是先列后行的顺序,(1,1)=Q,(1,2)=A,(2,1)=W,(2,2)=S


七.曲路密码

也是一种换位密码,需要双方事先约定好密钥(曲路路线)

假设明文是Takagisan is the best in the world

填入4行七列表(需要事先约定好)

T a k a g i s
a n i s t h e
b e s t i n t
h e w o r l d

如下图👇加密回环路线,从右往左(需要事先声明好),最终加密效果就是,dtesihnlritgastowsjkaneehbat,解密也非常简单,按照约定,4行7列,回环路线从右往左,密文从左到右,重新排序即可。


八.当铺密码

当铺密码就是中文与数字的结合,当前的汉字有多少笔画出头,就是转换成数字几。

如下表,就是当铺密码所对应的汉字和所对应的数字。

汉字 所对应的数字
1
2
3
4
5
6
7
8
9

比如夫大 工大 夫井,就是75 45 78,对应ASCII码就是KEN


九.培根密码加密方式

第一种方法如下表

字母 加密后 字母 加密后 字母 加密后 字母 加密后 字母 加密后 字母 加密后 字母 加密后 字母 加密后 字母 加密后 字母 加密后
A aaaaa B aaaab C aaaba D aaabb E aabaa F aabab G aabba H aabbb I abaaa J abaab
K ababa L ababb M abbaa N abbab O abbba P abbbb Q baaaa R baab S baaba T baabb
U babaa V babab W babba X babbb Y bbaaa Z bbaab

第二种方法如下表

字母 加密后 字母 加密后 字母 加密后 字母 加密后
a AAAAA g AABBA n ABBAA t BAABA
b AAAAB h AABBB o ABBAB u-v BAABB
c AAABA i-j ABAAA p ABBBA w BABAA
d AAABBA k ABAAB q ABBBB x BABAB
e AABAA l ABABA r BAAAA y BABBA
f AABAB m ABABB s BAAAB z BABBB

加密解密python程序如下👇,源自于网络,自己经过了一些修改。

import re

alphabet = ['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']

first_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","babaa","babab","babba","babbb","bbaaa","bbaab"]

second_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","baabb","babaa","babab","babba","babbb"]

def encode():
    string = input("请输入字符来加密:\n")
    e_string1 = ""
    e_string2 = ""
    for index in string:
        for i in range(0,26):
            if index == alphabet[i]:
                e_string1 += first_cipher[i]
                e_string2 += second_cipher[i]
                break
    print("第一种加密方式结果是:\n"+e_string1)
    print("第二种加密方式结果是:\n"+e_string2)
    return

def decode():
    e_string = input("请输入字符来解密:\n")
    e_array = re.findall(".{5}",e_string)
    d_string1 = ""
    d_string2 = ""
    for index in e_array:
        for i in range(0,26):
            if index == first_cipher[i]:
                d_string1 += alphabet[i]
            if index == second_cipher[i]:
                d_string2 += alphabet[i]
    print("第一种解密结果是:\n"+d_string1)
    print("第二种解密结果是:\n"+d_string2)
    return

if __name__ == '__main__':
    while True:
        print("\t*******培根密码加密解密*******")
        print("输入应该是小写密码只包含ab")
        print("1.加密\n2.解密\n3.退出")
        s_number = input("请输入数字来选择\n")
        if s_number == "1":
            encode()
            input()
        elif s_number == "2":
            decode()
            input()
        elif s_number == "3":
            exit()
        else:
            continue

十.RSA算法加密

RSA算法,应该算难的一种了,视频可以去看李永乐老师的👉李永乐老师讲RSA,首先需要知道的东西如下👇。

1.两个质数:p q(只有1和他本身两个约数的数叫做质数)
2.n=p*q
3.φ(n) = (p-1)(q-1)  欧拉函数
4.公钥e是一个1<e<φ(n)的整数,e和φ(n)必须要互质
  私钥d 必须是(e*d)modφ(n)=1,假设φ(n)是20,那
  e取值为3,d取值为7,就是(3*7)mod20=1,余数就
  可以是1,那么私钥就可以是为7。

5.加密,假设M是明文,m的e的平方除以n余数就是c
6.解密,C为密文,同时私钥d,c的d次方除以n余数就是m

看懂如上即可看不懂怎么办,我也看不懂,如下的带数操作。

m=14	e=3		p=5		q=11	请写出RSA加密解密过程和结果

求n:p*q=5*11=55

求φ(n):φ(n)=(p-1)*(q-1)=(5-1)(11-1)=40

求d:已知求d公式为(e*d)modφ(n)=1,就是(3*d)mod40=1,算出d为27。

加密:已知公式为(m^e)modn=c套用(14^3)mod55=c,算出c为49

解密:已知公式为(c^d)modn=m套用(49^27)mod55=m,算出m为14

第二测试题如下👇

p=43	q=59	e=13	m=134879475204	用RSA对m进行加密

加密公式为(m^e)modn=c,我们需要知道e和n即可算出c。

求n:n=p*q=43*59=2537

加密m:(134879475204^e)mod2537=1202


未完待续…..


文章作者: 坂琴
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 坂琴 !
评论
  目录