第二周学习任务

一,RSA数学基础预习

预习内容如下(因为是手写,上传图片):

二,古典密码的特征与习题

1.猪圈密码

猪圈密码(Pigpen cipher),是一种外形古怪的密码。它是以格子为基础的简单替代式密码。用起来非常简单。

将字母表中的每个字母分配给特定形状的方括号或“猪圈”。写秘密信息时,不用写字母,而是画出每个字母所在的方括号。

猪圈密码的加密原理很简单,它需要一个特定的密表,然后用密表中指定的符号替换明文中的字母,最后得到的结果即为密文。

如何制作密码
绘制猪圈密码本身就很有趣。

首先,绘制26种不同的“猪圈”,并且每个都配有一个字母。要确保每个猪圈看上去和其他的都不同,这是基本的猪圈密码示例:

比如我们要传输一条信息“ANT”,就要找到每个字母,并注意“猪圈”的形状:

 

 这样我们可以把ANT写成:

从上面的例子,我们可以清晰的看出猪圈密码的替换规律,例如,如果你要加密的是明文是A,那么密文就书写成,密表中A所在的区域,一个向左开的直角图案,如果想表达其他字母,也是一样的方法。

因为猪圈密码,本质上是一个很简单的替代密码,所以,它的解密方法和加密方法刚好相反,只要我们知道加密时所用的密表,即可通过对比密表,将密文替换为明文。

值得特别注意的是,猪圈密码有许多变体,例如以下这几种:

1、使用#网格、X网格、#网格、X网格的布局来重新排列字母

2、把字母交替放置在#和点中,把字母拆分 

3、改变某个字母的符号

4、使用三个#网格,取消X网格

 

【1】工具:CTF在线工具-在线猪圈密码加密|在线猪圈密码解密|猪圈密码算法|Pigpen Cipher在线猪圈密码加密、在线猪圈密码解密、猪圈密码原理、猪圈密码算法、Pigpen Cipher。icon-default.png?t=N7T8http://www.hiencode.com/pigpen.html 

【2】例题 [SWPUCTF 2021 新生赛]pigpig

根据下载的图片,得出需要使用猪圈密码解密完成这道题,登录现有的网站进行解密即可

第一题解出

 

2. UUencode编码

(这个在网上找了找相关资料,但还是有点不明白,找了一下实现的代码但有点看不懂)

uuencode是将二进制文件转换为文本文件的过程,转换后的文件可以通过纯文本e-mail进行传输,在接收方对该文件进行uudecode,即将其转换为初始的二进制文件。   

uu 编码   

uuencode 编码方式用于将任意的二进制文件转换为文本文件,比如email.转换后的文件中仅包含可打印字符.   

uuencode 运算法则将连续的 3字节编码转换成 4字节(8-bit 到 6-bit)的可打印字符. 该编码的效率高于Hex 格式.   

从二进制文件中读取 3字节的数据, 表示如下(a7 表示 a字节的第 7位):   

a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0   

转换它们到4字节里为如下所示:   

0 0 a7a6a5a4a3a2 0 0 a1a0b7b6b5b4 0 0 b3b2b1b0c7c6 0 0 c5c4c3c2c1c0   

然后, 每个字节再加 0x20转换为可打印的字符.   

注意: 如果是一个 0字节那它应该被转换为0x60而不是0x20, 因为(前引用'`')优于 0x20(空格' ').   

例如: 从文件中读取的 3字节如下:   

14 0F A8   

00010100 00001111 10101000   

转换为 6-bit:   

000101 000000 111110 101000   

每字节高两位补 0后为:   

00000101 00000000 00111110 00101000   

最后每字节再加 0x20,则 4字节输出应该为:   

25 60 5E 48   

注意: 00字节被转换为 0x60而不是 0x20.   

因此, 在一个 uuencoded文件中仅包含字符 0x21 '!'到 0x60 '`',它们都是可打印和可被 email传送的.   

这个转换过程也意味着 uuencoded 文件要比原文件大 33%的.
流程如下:

 其转换源码如下:

//header
#pragma once
#define ENCODE_BYTE(b) (((b) == 0) ? 0x60 : ((b) + 0x20)) 
#define DECODE_BYTE(b) ((b == 0x60) ? 0 : b - 0x20)
 
void Byte3ToAsc4(unsigned char inbyte[3],unsigned char outAsc[4]);
void Asc4ToByte3(unsigned char inAsc[4],unsigned char outByte[3]);
 
//body
#include "StdAfx.h"
#include "UUencode.h"
//encode
void Byte3ToAsc4(unsigned char inbyte[3],unsigned char outAsc[4])
{
	outAsc [0] = ENCODE_BYTE ((inbyte [0] & 0xFC) >> 2);
	outAsc [1] = ENCODE_BYTE (((inbyte [0] & 0x03) << 4) + ((inbyte [1] & 0xF0) >> 4));
	outAsc [2] = ENCODE_BYTE (((inbyte [1] & 0x0F) << 2) + ((inbyte [2] & 0xC0) >> 6));
	outAsc [3] = ENCODE_BYTE (inbyte [2] & 0x3F);
}
//decode
void Asc4ToByte3(unsigned char inAsc[4],unsigned char outByte[3])
{
	outByte [0] = DECODE_BYTE (inAsc [0]); 
	outByte [1] = DECODE_BYTE (inAsc [1]);
	outByte [0] <<= 2;
	outByte [0] |= (outByte [1] >> 4) & 0x03;
	outByte [1] <<= 4;
	outByte [2] = DECODE_BYTE (inAsc [2]);
	outByte [1] |= (outByte [2] >> 2) & 0x0F;
	outByte [2] <<= 6;
	outByte [2] |= DECODE_BYTE (inAsc [3]) & 0x3F;
}

特征:UUencode的加密方式和base64很相似。但他的编码表有很多是特殊字符:”!”#¥%&‘()*+=’” 等等

【1】工具: UUencode加密/解密 - Bugku CTFicon-default.png?t=N7T8https://ctf.bugku.com/tool/uuencode

【2】例题 [SWPUCTF 2021 新生赛]crypto8

观察下载好的附件,利用工具进行解密

第二题做出

 

3.凯撒密码(最简单的对称加密)

 

凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。

因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。

该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。

凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。

特征:只对字母进行加密

 

【1】工具凯撒(Caesar)加密/解密 - Bugku CTFicon-default.png?t=N7T8https://ctf.bugku.com/tool/caesar

【2】例题[NSSCTF 2022 Spring Recruit]classic 

根据文件判断用凯撒密码进行解密

根据后文的base提示,进行base编码解密,我是挨个试的,试出base32是合适的 

 

4.维吉尼亚密码

 

可以说是凯撒密码的加强版,引入了密钥

维吉尼亚密码,它将凯撒密码的所有26种排列放到一个表中,形成26行26列的加密字母表。此外,维吉尼亚密码必须有一个由字母组成的密钥,至少有一个字母,最多与明文字母有相同数量的字母。
在凯撒密码中,每个字母都会进行一定偏移值转换,例如,当偏移值是3时,则B被转换为E,C转换成F…。在维吉尼亚密码加密中,则是由具有不同偏移的凯撒密码构成的。
要生成密码,需要使用表格方法,此表(如图所示)包含26行字母表,每一行从上一行到左行被一位偏移。加密时使用哪一行字母表是基于密钥的,在加密过程中密钥会不断变化。
例如,假设明文为:
BTTACKATDAFG
选择一个关键字并重复它以获得密钥,例如,当关键字是LIMN时,键是:
LIMNLIMNLIMN
在明文中的第一个字母B,对应于密钥中的第一个字母L,使用加密字母表中的L行字母进行加密,得到第一个字母的密文M。同样,第二个明文字母是T,它用表中的I行加密,得到第二个密文B。通过类比,我们可以得到:
明文:BTTACKATDAFG 键:LIMNLIMNLIMN 密文:MBFNNSMGOIRT
解密的过程是加密的逆过程。例如,密钥的第一个字母对应的L行字母表,发现密文的第一个字母M位于B列,因此明文的第一个字母是B。密钥的第二个字母对应于I行字母表,而密文的第二个字母B位于该行的T列中,因此明文的第二个字母是T。等等,你可以得到明文。
                        
原文链接:https://blog.csdn.net/weixin_45728976/article/details/109219997

 

 

【1】工具:

GitHub - atomcated/Vigenere: 维吉尼亚密码加密解密程序,包含自动猜测密钥功能维吉尼亚密码加密解密程序,包含自动猜测密钥功能. Contribute to atomcated/Vigenere development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/atomcated/Vigenere

【2】例题 [AFCTF 2018]Vigenère

打开以后得到一篇文章,利用工具进行解密:

寻找关键字flag即可

5. 栅栏密码

栅栏密码是按一定规则将明文内容互相调换了位置

栅栏密码(Rail fence Cipher)基础型加密方式,是一种简单的移动字符位置的加密方法,首先把加密的明文分成N个一组,然后把每组的第1、第2、第M个字符连起来,形成无规律的密文字符串。

例如字符串“123456789abc”,首先将字符串分成3组,如下排列:
1234
5678
9abc
依次取每一组字符,组成加密后密文:“15926a37b48c”。

栅栏密码W型加密算法:
栅栏密码(Rail fence Cipher),扩展变种W型,采用先把明文类似"W"形状进行排列,然后再按栏目顺序1-N,取每一栏的所有字符值,组成加密后密文。
比如字符串“123456789”,采用栏目数为3的时,明文将采用如下排列:
1—5---9
-2-4-6-8-
–3----7–
取每一栏所有字符串,组成加密后密文:“159246837”。

【1】工具:栅栏加密/解密 - Bugku CTFicon-default.png?t=N7T8https://ctf.bugku.com/tool/railfence

 【2】例题[WUSTCTF 2020]佛说:只能四天

这个题涉及的密码比较多,我直接上截图

 

根据提示,只说四天,栏数为4 

 

 

 

 

 

 

 

 


 

 

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值