CTF之密码学

CTF之密码学

01密码学概述

目的:为了保证数据传输的可靠性
核心:密码学;(用于数据动态传输和静态存储)
方法:

  • 编码:相当于有一张映射表
  • 加密:需要算法和密钥,较为复杂
  • 摘要:雪崩效应(哪怕只改变1bit)和不可逆(无法逆推)

密码学的发展

  • 第一阶段是从古代到19世纪末------古典密码
  • 第二阶段是20世纪初到1949年------近代密码
  • 第三阶段从C.E.Shannon(香农)于1949年发表的划时代论文"The Communication Theory of Secret Systems "------现代密码
  • 第四阶段从1976年W.Diffie和M.Hellman创造性地发表了论文"New Directions in Cryptography"开始-------公钥密码

密码编码学

**密码编码学**是密码学的一个分支,研究与信息安全(例如:机密性,完整性,可鉴别性)有关的数学技术。

**密码编码学**是包含数据变换的原理,工具和方法的一门学科,这种数据变换的目的是为了隐藏数据的信息内容,组织对数据的篡改以及防止未经许可使用数据

**密码编码学**是论述使明文变得不可懂的密文,以及把已加密的消息变换成可懂形式的艺术和技巧。

对称密码算法:加密密钥和解密密钥相同,或实质上等同,即从一个易于推出另一个。又称传统密码算法,秘密密钥算法或单密钥算法。

有:DES,3DES,IDEA,AES

非对称密码算法:加密密钥和解密密钥不同,从一个很难推出另一个。又叫公钥密码算法。其中的加密密钥可以公开,称为公钥,解密密钥必须保密,简称私钥。

有:RSA,ECC,ELGamal

**数据摘要算法**是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希(Hash) 算法散列算法,常见的摘要算法有MD5和SHA

在互联网上进行大文件传输时,都要得用MD5算法产生一个与文件匹配的、存储MD5值的文本文件(后缀名为.md5或md5sum),这样接收者在接收到文件后,就可以利用与SFV类似的方法来检查文件完整性,绝大多数大型软件公司或开源组织都是以这种方式来校验数据完整性,而且部分操作系统也使用此算法来对用户密码进行加密,另外,它也是目前计算机犯罪中数据取证的最常用算法。

SHA中SHA1的应用较为广泛,主要应用于CA和数字证书中,另外在互联网中流行的BT软件中,也是使用SHA1来进行文件校验的,由于SHA系列算法的数据摘要长度较长,因此其运算速度与MD5相比,也相对较慢。

对密码学概述小总结

对称加密:加解密共用一把钥匙,速度快,但是密钥不能泄露
非对称加密:加解密使用不同的钥匙,速度慢(比对称加密慢1000倍)

  • 公钥,私钥:公钥可以分给其他人,私钥只有一把,只能自己拥有(用公钥加密,只能用私钥解密;反之亦同)
  • 公钥加密:只能私钥解密,也就是能保证发给特定的对象
  • 私钥加密:只有他的公钥才能解开,换句话说,只要公钥解开,就说明一定是这个人发的
  • 注意:通常传输数据,是用对称加密的方式保证可靠。
  • 通常网站是使用证书保证安全性

02常见编码
ascii码使用指定的7位或8位二进制组合来表示128或256种可能的字符。标准ascii码也叫基础ascii码,用7位二进制数(剩下1位二进制为0)来表示所有的大写和小写字母,数字0到9,标点符号,以及在美式英语中用的特殊控制字符

在这里插入图片描述后128个称为扩展ascii码,许多基于x86的系统都支持使用扩展ascii。扩展ascii码允许将每个字符的第八位用于确定附加的128个特殊符号字符,外来语字母和图形符号。

base64

Base64顾名思义就是用64个可显示字符表示所有的ASC字符,64也就是6Bits,而ASC字符一共有256个,也就是8Bits。 Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’ ,因此编码后输出的文本末尾可**能会出现1或2个’='**
在这里插入图片描述

url编码

一般对中文进行编码

url编码就是一个字符ascii码的十六进制.不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“”的url编码就是%5c。
特点:密文中有多个%

Unicode编码

Unicode码扩展自ASCII字元集。在严格的ASCII中,每个字元用7位元表示,或者电脑上普遍使用的每字元有8位元宽;而Unicode使用全16位元字元集。这使得Unicode能够表示世界上所有的书写语言中可能用於电脑通讯的字元、象形文字和其他符号。

特点:密文中有多个\uxxx

js混淆

有些时候开发者为了保护劳动成果可以通过对javascript的变量名称和过程名称进行编码,从而起到混淆js代码的作用,通常使用eval函数进行混淆处理,该函数可以计算字符串,并执行其中的JS代码。
如,对 alert( xSS’ ); 进行16进制转换,然后使用eval函数进行读取

eval(“x61\x6c\x65\x72\x74\x28\×27\x58\x53\x53\x27\×29\x3b”);

特点:通常在JS脚本里使用eval与function函数进行混淆。

jsfuck

JSFuck是用6个字符0O)!+来编写JavaScript程序,如下图所示
在这里插入图片描述
alert(XSS)经过加密后便使用了+进行编写,点击run this对进行解密,或将密文放在浏览器的console控制台上进行解密。

Jother

Jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编码方式。其中8个少量字符包括: !+()1(。只用这些字符就能完成对任意字符串的编码(可以在浏览器的console控制台上直接解密)

aaencode

aaencode使用的表情符号对js代码进编码,可以直接在命令行中继续解码,或者在链接网站进行解码

在这里插入图片描述

编码小总结:

  • ASCII:7到8位,最多表示256个
  • 字符base系列:特征末尾有=
  • URL:%两个十六进制数Unicode: \u
  • Unicode: \u

03常见加密算法

  • 换位加密:栅栏密码、曲路密码、列位移密码
  • 替换加密:凯撒密码、摩斯密码、ROT5/13/18/47、维吉尼亚密码、培根密码、键盘密码
  • 其他密码:MD5、SHA

栅栏密码

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)

举例:

明文:THE LONGEST DAY MUST HAVE AN END
分组:TH EL ON GE ST DA YM US TH AV EA NE ND
加密:
1、把将要传递的信息中的字母交替排成上下两行。
第一组:T E O G S D Y U T A E N N
第二组:H L N E T A M S H V A E D
2、 密文:
将下面一行字母排在上面一行的后边。
TEOGSDYUTAENN HLNETAMSHVAED
解密:
先将密文分为两行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话
明文:THE LONGEST DAY MUST HAVE AN END

曲路密码

曲路密码(Curve Cipher)是一种换位密码,需要事先约定填充的行列数(也就是曲路路径)

在这里插入图片描述
换位加密--列移位密码

列移位密码是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。

在这里插入图片描述
替换加密--凯撒密码

凯撒密码(Caesar Cipher或称恺撒加密、恺撒变换、变换加密、位移加密)是一种替换加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的候,所有的字母A将被替换成D,B变成E,以此类推

明文:The quick brown fox jumps over the lazy dog
偏移量:1.

密文:Uif rvjdl cspxo gpy kvnqt pwfs uif mbaz edph

替换加密-摩斯密码

摩尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯在1836年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代码,摩尔斯电码主要由以下5种它的代码组成:

  1. 摩尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯在1836年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代码,摩尔斯电码主要由以下5种它的代码组成:
    1.点(.)
    2.划(-)
    3.每个字符间短的停顿(通常用空格表示停顿)
    4.每个词之间中等的停顿(通常用7划分),
    5.以及句子之间长的停顿

替换加密-ROT5/13/18/47

ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为O,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。

ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。

ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18.

ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码。

ROT5/13/18/47在线加解密http://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php

替换加密-维吉尼亚密码

维吉尼亚密码(Vigenere Cipher)是在单一恺撒密码的基础上扩展出多表代换密码,根据密钥(当密钥长度小于明文长度时以循环使用)来决定用哪一行的密表来进行替换,以此来对抗字频统计

在这里插入图片描述
替换加密-培根密码

培根密码(Baconian Cipher)是一种替换密码,每个明文字母被一个由5字符组成的序列替换,最初的加密方式就是由A和‘B’组成序列替换明文(所以你当然也可以用别的字母),比如字母‘D’替换成“aaabb”,以下是全部的对应关系(另一种对于关系是每个字母都有唯一对应序列,I和J与U/V各自都有不同对应序列)

在这里插入图片描述
在这里插入图片描述

04摘要算法

MD5(哈希算法)
MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

MD5值分为16位和32位,同常MD5的值中最大是F,如,603F52D844017E83CA267751FEE5B61BMD5

在线加解密地址:http://www.cmd5.com/

SHA(安全哈希算法)
SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。SAH的值通常是40位,最大值是F

对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2128数量级的操作,而对SHA-1则是2160数量级的操作。这样, SHA-1对强行攻击有更大的强度。

在线加密解密:http://tool.oschina.net/encrypt?type=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃香菜的哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值