week2
编码解码
古典密码
【古典密码】是密码学中的其中一个类型,其大部分加密方式都是利用 替换式密码 或 移项式密码,有时则是两者 的混合。
凯撒密码
它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成 密文。 例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E。
通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移 量是左移3的时候(解密时的密钥就是3)
![[Pasted image 20241024224947.png]]
维吉尼亚密码
是由一些偏移量不同的恺撒密码组成。 为了生成密码,需要使用表格法。 这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进 行的,在过程中会不断地变换
加密过程:
密钥循环与明文对应表格得到密文
解密过程:找到密钥一列密文对应哪一行
![[Pasted image 20241024225437.png]]
假设明文为:HEETIAN 然后选择某一关键词并重复而得到密钥,如关键词为LAB时,密钥为:LABLABL 对于明文的第一个字母H,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母S。 类似地,明文第二个字母为E,在表格中使用对应的A行进行加密,得到密文第二个字母E。以此类推,可以得到:
明文:HEETIAN 密钥:LABLABL 密文:SEFEIBY
解密的过程则与加密相反。 例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母S位于H列,因而明文第一个字母为H。 密钥第二个字母A对应A行字母表,而密文第二个字母E位于此行E列,因而明文第二个字母为E。以此类推便可得到明文
培根密码
培根密码的本质是将字母用一串二进制数替换,但是表示的过程中,没有采取0和1的形式,而使用a和b来代替
加密的过程
首先将要加密的内容根据加密表里的内容进行替换, 如a用AAAAA替换,b用AAAAB替换。 替换完之 后,我们可以把A和B当作两个不同的特征(如大写/小写,正体/斜体)带入到一个无关的句子中, 这就得到了我 们加密后的结果。 其本质上是将二进制信息通过样式的区别,加在了正常书写之上。
![[Pasted image 20241024231439.png]]
例如,假设明文为:HEETIAN 然后选择某一关键词并重复而得到密钥,如关键词为LAB时,密钥为:LABLABL 对于明文的第一个字母H,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母S。 类似地,明文第二个字母为E,在表格中使用对应的A行进行加密,得到密文第二个字母E。以此类推,可以得到: 明文:HEETIAN 密钥:LABLABL 密文:SEFEIBY 解密的过程则与加密相反。 例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母S位于H列,因而明文第一个字母为H。 密钥第二个字母A对应A行字母表,而密文第二个字母E位于此行E列,因而明文第二个字母为E。以此类推便可得到明文。
栅栏密码
加密过程:n栅密码分n组 把每组第一个第二个等分别拿出来形成密文
以2栏栅栏密码为例来讲解它的加密和解密过程。 加密过程: 解密过程: 那么如何将2栏密码扩展到多栏呢?在之前的明文中,CIPHER这个单词之后加了一个下划线, 目的就是为了让明文 字符串的长度是2的倍数, 栅栏密码的分栏的一个前提就是分的栏数需是明文长度的因数,这样才会使得分出来的 每个栏长度都一样。 对于多栏,我们还是用上面的例子来讲解。 上面的明文字符串(THERE_IS_A_CIPHER_)的长度是18 所以我们可以把它分为2,3,4,6,9栏,这里我们以6栏为例。 以每个元素相隔6个字符分割出栅栏。 明文:THERE_IS_A_CIPHER_ 两个一组,得到:(TH) (ER) (E_) (IS) (A) (C) (IP) (HE) (R) 先每组中取出第一个字母:TEEI__IHR 再从每组中取出第二个字母:HR_SACPE 连在一起得到密文:TEEI__IHRHR_SACPE_ 而解密的时候,先把密文从中间分开,变为两行: TEEI__IHR HR_SACPE_ 再按上下上下的顺序组合起来: THERE_IS_A_CIPHER_
希尔密码
[ASCII码](ASCII码 - 基本ASCII码和扩展ASCII码,中文最全ASCII码对照表0~255)
base16
- 使用十六个字符(16进制)0-9 A-F 不区分大小写
加密过程 根据ASCII码转换为二进制 四个一组划分 每组再转化为16进制
base32
- 32个可打印字符 (A-Z 2-7)
- Base32主要用于编码二进制数据,但是Base32也能够编码诸如ASCII之类的二进制文本。
加密过程 根据ASCII码转换为二进制 五个一组划分(不够补0) 不足四十倍数补=
一个=相当于五个字节
![[Pasted image 20241024233351.png]]
base64
64个可打印字符(a-z A-Z 0-9 + /)
根据ASCII码转换为二进制 6个一组不够补零 整体不够24的倍数补= 一个=相当于6bit
![[Pasted image 20241024234013.png]]
区分base16 base32 base64
有小写base64
有等号base32 base64
MISC-隐写
原理:把秘密隐藏到普通的信息中,但是目前的隐写术是将某些秘密信息隐藏于数字媒介中,而又不损害载体原来信息的表达,从而掩盖秘密信息。常见的隐写载体包括文本,图像,音频,视频等。比赛中主要考察两点:隐写方法的识别和信息提取。
图像隐写
常见的图像隐写分为两类:插入隐写和替换隐藏
插入隐写:指利用文件格式的冗余性,在不影响文件的正常使用从而隐藏信息,这种方法会导致文件的大小发生变化,
将1.jpg和1.zip进行合并之后,仍然得到一个和1.jpg“一摸一样”的图片,但是我们查看文件大小之后发现,大小正好是两者之和。
替换隐写(常考):也就是将几乎不影响文件内容的数据进行修改,达到隐藏信息的目的,最常见的是最低比特位隐写(LSB隐写)。因为有损压缩会损毁修改掉的微小信息
LSB隐写:在图像中,每一个通道由8比特构成,像素值在0~255之间,在单通道图像中,通过不同的黑白比例达到不同的灰度,三通道图像中(RGB),每个通道代表红,绿,蓝,在RGBA图像中,多出一个透明度通道。因为二进制数据的最后一位大小改变的影响很小,就可以在这里替换数据。
每一个色素都由RGB(红绿蓝)三种颜色组成,每种颜色的占比不同,所调出来的颜色不同。红218(11011010),绿150(10010110),红(10010101),假如改变每种颜色二进制数字的最后一位,对于整体的颜色改变, 肉眼并不能观察出来,从而达到隐藏信息的目的
PNG
PNG图片(无损压缩)
PNG图片文件头的16进制表示:89 50 4E 47
一个png图片的数据可以分为多个数据块。
我们之所以能看到图片,就是因为图片查看器将图片所对应的二进制字节流按照它的解释规则将图片转换为色素块,分析一个图片通常是查看它的原始二进制字节流
IHDR数据块:文件头数据块,通常包含图片的高度和宽度等基本属性,可以通过将crc还原出来所对应的==高度==和==宽度==来找到flag。
![[Pasted image 20241027121726.png]]cHRM数据块。
IDAT数据块(多个)(包含图片内容):包含了数据的构成参数。如果该数据块有问题,有一种题型是在该数据块中存有压缩包,通过Zlib工具解压缩查看内容。
IEAD数据块:图片结束标志。
JPG (有损或者无损)
JPG图片(由一个一个段组成)
文件头识别:FFD8
GIF(无损)
GIF图片文件头:GIF89a/GIF87a
流量分析
流量捕获 通常题目会提供一个 .pcap 文件,它是网络数据包的捕获文件,我们需要分析其中的流量数据。
流量分析的常见流程
- 初步检查流量文件 使用Wireshark打开
- 协议识别与分析 .pcap 文件,查看流量总量、协议类型
- 查找最多或者最少流量。
- 筛选和过滤数据包 使用Wireshark的过滤器功能,逐步缩小感兴趣的范围。比如,HTTP流量的过滤条件 是http,DNS是 dns ,通过源/目的IP、端口等进一步过滤。
- 查找数据流
搜索格式为frame contains “ “
Liunx系统下配置文件放在etc目录 下,