简单密码学总结1.0


经验

解题思路如下:

  • 已知密文,根据密文的特征(长什么样子),判断是用什么方式加密,从而解密

  • 未知密码,分析密码特性,利用暴力破解或者其他相应思路求解

有时候,题里会混合多种编码方式,解出来一种后,还需要观察其间的关系

 

一些简单的编码

摩尔斯编码:

摩尔斯电码由两种基本信号组成:短促的点信号“·”,读“滴”;保持一定时间的长信号“—”,读“嗒”。间隔时间:滴=1t,嗒=3t,滴嗒间=1t,字符间=3t,单词间=7t。

简单密码学总结1.0_java

注意:注意分割方式,也就是标点符号。如果比赛中放一段音频,可以自己听,也可以下载一个软件:audio

特征(大概长这个样子的就是摩尔斯):-.- .. --.- .-.. .-- - ..-. -.-. --.- --. -. ... ---

解码:有转换工具,网上也可以在线转换,但是有些网站不准,可以多测试下

 

 

曼彻斯特编码(主要掌握怎么辨识

也称作相位编码,常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;G. E. Thomas, Andrew S. Tanenbaum等人在1949年提出的,它规定0是由低-高的电平跳变表示,1是高-低的电平跳变。现在以这个为标准。

简单密码学总结1.0_java_02

主要能看的懂密码就行,现在都用标准曼彻斯特编码,看的方法的话,1对应的曲线是高到低,0对应的曲线是低到高

 

格雷码:

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同

解码:用‘0和采集来的4位格雷码的最高位(第4位)异或,结果保留到4位,再将异或的值和下一位(第3位)相异或,结果保留到3位,再将相异或的值和下一位(第2位)异或,结果保留到2位,依次异或,直到最低位,依次异或转换后的值(二进制数)就是格雷码转换后自然码的值.

异或:异或则是按位“异或”,相同为“0”,相异为“1”。例:

 

 

Ascii编码:


参照ascii码标准表https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81%E8%A1%A8&fromid=19660475&fr=aladdin

要记到基础的,如数字1-10、字母的ascii码

当遇见需要用ascii码解决的问题的时候,有转换工具,网上有也在线转换器

 

例题:

突然天上一道雷电gndk€rlqhmtkwwp}z分析gndk€rlqhmtkwwp}z

这个格式有点像flag{*******}?

我们比较一下"gndk"与"flag"的ASCII码

gndk的10进制的ASCII码分别是:103 110 100 107

flag的10进制的ASCII码分别是  102 108  97  103

发现ASCII以此减少 1 2 3 4,所以以此类推解密得flag{lei_ci_jiami}

 

二进制编码

是由1和0两个数字组成的,它可以表示两种状态,即开和关。所有输入电脑的任何信息最终都要转化为二进制。目前通用的是ascii码。最基本的单位为bit。

https://baike.baidu.com/item/ASCII/309296?fromtitle=ascii%E7%A0%81%E8%A1%A8&fromid=19660475&fr=aladdin 参考标准表,与上ascii对应

特征:由0、1组成

 

十六进制编码

有16个基数:0 ~~ 9,A,B,C,D,E,F(A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一。

同样参照标准表。

特征:由字母ABCDEF和数字0~9组成

 

 

base编码

注意:除了以下举例的ascii转base编码以外,图片、文字、字母、字符等都可以转base编码,网上有转换工具,或者在线转换器

编码:ascii到base表 解码:base表到ascii

(1):base64

base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3

编码:6位变8位 解码:8位变6位

编码:ascii到base64 解码:base64表到ascii

举例编码过程(可以了解一下原理,不必太深入,有转换工具使用的)

转前: s 1 3

先转成ascii:对应 115 49 51

2进制: 01110011 00110001 00110011

6个一组(4组) 011100110011000100110011

然后才有后面的 011100 110011 000100 110011

然后计算机是8位 8位的存数 6不够,自动就补两个高位0了

所有有了 高位补0

科学计算器输入 00011100 00110011 00000100 00110011

得到 28 51 4 51

查对下照表 c z E z

重点要知道编码之后长什么样子,才好通过工具来解密

特征:密文字符串的长度为4的整数倍。字符串的符号取值只能在A-Z, a-z, 0-9, +, /, =共计65个字符中,且=如果出现就必须在结尾出现。

 

 

2:base32

base32就是用32(2的5次方)个特定ASCII码来表示256个ASCII码。所以,5个ASCII字符经过base32编码后会变为8个字符(公约数为40),长度增加3/5.不足8n用“=”补足

八位变五位

(编码举例)这里以“bhst”字符串进行编码。步骤如下:

字符“bhst”ASCII码之后,对其转换成二进制得到“1100010,1101000,1110011,1110100,”共四个字节,28bit的二进制串。注:因为base32是属于传输8bit字节代码的编码方式,所以这里要对“bhst”字符串对应的二进制最高位加0变成每组8bit。组成32bit的二进制串。【所以变为01100010,01101111,01110011,01110100

2.以5个bit为一组对“bhst”字符串对应的二进制串进行切分。得到“01100,01001,10100,00111,00110,11101,00000”7个字节的“bhst”二进制串。注:每组的二进制串不足5个用0补充。

3.计算每组二进制串所对应的十进制,然后参考标准Base32编码表,找出所对应的编码字符,组合成密文。注:最后一个分组位数不足4个的时候,则用字符“=”编码

如下表:

 

 

(3):base16

base16就是用16(2的4次方)个特定ASCII码表示256个ASCII字符

与上类似,不过是八位变四位

 

 

url编码

url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输入格式样子象这样:

theName =Ichabod + Crane & gender=male & status=missing& ; headless =yes

其实url编码就是 %加上字符ascii十六进制

URL编码平时是用不到的,因为IE会自动将输入到地址栏的非数字字母转换为url编码。

但是这里有一个防止sql注入:因为IE遇到#就会忽略后面的字母。破解方法很简单——用url编码%23替换掉#

特征:有大量%号

解码:有url转换工具,搜索url编码在线转换

 

Unicode编码

Unicode 当然是一本很厚的字典,记录着世界上所有字符对应的一个数字。具体是怎样的对应关系,又或者说是如何进行划分的,就不是我们考虑的问题了,我们只用知道 Unicode 给所有的字符指定了一个数字用来表示该字符。

对于 Unicode 有一些误解,它仅仅只是一个字符集,规定了符合对应的二进制代码,至于这个二进制代码如何存储则没有任何规定。它的想法很简单,就是为每个字符规定一个用来表示该字符的数字,仅此而已。

特征:有/#&;这样的字符

HTML实体编码(参照http://www.w3school.com.cn/tags/html_ref_entities.html

在 HTML 中,某些字符是预留的。在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体

特征:如需显示小于号,我们必须这样写:&lt; 或 &#60;

凯撒密码

通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。

例子:

(数字不用管,g代表字母表中的6,u代表字母表中的20,以此来推,所以密钥:guangtou 推出来偏移量就是6.20.0.13.6.19.14.20 然后s+6=y、a+20=u、、、这样就得到密文啦哈哈哈)

埃特巴什码

埃特巴什码(Atbash Cipher)是一个系统:最后一个字母代表第一个字母,倒第二个字母代表第二个字母。

在罗马字母表中,它是这样出现的:

常文: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

防射密码

加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是:C=Ek(m)=(k1m+k2) mod n (字母表中n=26)

M= Dk(c)=k3(c- k2) mod n(其中(k3 &times;k1)mod n = 1)

仿射密码具有可逆性的条件是gcd(k1, n)=1。当k1=1时,仿射密码变为加法密码,当k2=0时,仿射密码变为乘法密码

仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12&times;26 = 312。

加密举例

设密钥K= (7, 3), 用仿射密码加密明文hot。

三个字母对应的数值是7、14和19。(字母表中)

分别加密如下(mod求余)

(7&times;7 + 3) mod 26 = 52 mod 26 =0

(7&times;14 + 3) mod 26 = 101 mod 26 =23

(7&times;19 + 3) mod 26 =136 mod 26 =6

三个密文数值为0、23和6,对应的密文是AXG。

解密举例

根据以上例子,我总结出来的解密方法哈,百度百科上有辗转相除法,我是看不懂嘿嘿

密钥k=(7,3)

比如求第一位,设我们要求的密码数值为x

列方程式: (7 * x + 3) mod 26 = mod 26 =0

我们晓得余数是0,那?就是26的整数倍,来试一试?=26的话,x=(26-3)/7不为整数,?=26*2=52的话,x=(52-3)/7=7,所以第一位就是7

很麻烦哈哈,所以同学们要是有其他的算法,麻烦给我讲讲啊,谢谢啦

 

培根密码

培根密码,培根所用的密码是一种本质上用二进制数设计的,没有用通常的0和1来表示,而是采用a和b

A aaaaa B aaaab C aaaba、、、这样,百度百科上有

举例说明

如:密文是LOVE,用“随意选取句子和文”加密,得到结果就是“SuLyi XuanQ uJuZi HEwEN”(这里用小写代表b

所以,SuLyi可以看做ababb查表为L

 

 

栅栏密码

栏栅就是看因数分配的,如果出现不能整除的,那就可能是有什么规律,不符合固有规则,如密码长度是14的话,就是2和7

这里有一个脑洞巨大的非常规例子

 

 

路密码

移位加密

和凯撒密码类似,不过可以自己随意规定

 

18、列移位密码

 

 

 

19、01248密码

 

 

20、猪圈密码

猪圈密码(亦称朱高密码共济会暗号共济会密码共济会员密码),是一种以格子为基础的简单替代式密码。即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。

 

举例

 

 

21、舞动的小人(哈哈哈哈哈哈

 

22、手机按键

 

23、电脑键盘

 

 

简单密码学总结1.0_java_03

24维吉尼亚密码


在恺撒密码基础上升级了一点

明文:qwe

密钥:ert

密文:uox

简单密码学总结1.0_java_04


                                            

简单密码学总结1.0_java_05

25(行号)(列号)

网上还有关于这些密码的解释,如果觉得上面那些有些不清楚的话,可以参考参考网上的,也有一些其他密码,这里是链接:

1、        https://blog.csdn.net/sinat_25449961/article/details/56279952
2、        https://blog.csdn.net/qq_40836553/article/details/79383488
3、        https://www.cnblogs.com/mq0036/p/6544055.html 

长按识别二维码,了解更多