最近想要学习ctf密码学的部分,于是开始了从百度百科的入门之旅。
这里借助米斯特安全团队的一款工具来进行实际编码解码。
明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。----百度百科
其实就是按照特定的顺序将字母替换。比如后移2位,那么a就变成c,d就变成f。
下面更直观的看一下:
这种加密与凯撒十分类似,就是凯撒密码中移动13位的结果
这是利用a和b(A和B也行)来表示二进制中的0和1,并以此来表示26个字母,培根密码5位一组。
这个加密方式主要特征是只有两种不同的字母,都可转换为ab形式
def就可以表示为AAABBAABAAAABAB
百科上的例子:
但也存在不是两栏的情况,就需要对密文的总字数分解因数,尝试分栏的种类。
比如密文 TAHCEIRPEHIESR 14个字母,可以考虑2栏或7栏,解密如下:
根据不同情况,找到有意义的一组。
还是先看百科上的例子
核心思想在于将8位的二进制转换为6位的二进制。
而6位二进制共64种组合,可以表示10个数字,26个字母的大小写,外加符号+和/。一共64个。
对应编码
有一点要特别指出,当明文个数不是三的倍数时,就会出现 明文数*8%6不为零的情况,
这是如果余数为2,就在末尾补两个等号,如果余数为4,就补一个等号。对于余下的2个或4个二进制
采用高位补零的方法。
比如密文:cmFubA== 的明文为ranl
因此我们可以得出base64编码后的特征:只含有数字,字母,和符号+ / =。
这是浏览器方便传输信息和加强安全性的编码。url编码是字符ASCII码的十六进制加上%的格式。
部分对应表:
但在url中不是对所有的字符都要进行url编码,一般的字母和数字是不会被编码的。会以原本形式传递。
这是对ASCII码表的扩展,可以表示更多的字符,采用2个字节16位的储存形式。解码后可以看到16进制的表示形式。
其特征为以\u开头
这是为了利用内存采用的一种编码格式,这里只是看看其特征 开头ascii表之外的字符,
对于能用ascii表示的字符仍用ascii表示还是一个长度,就节省了内存。
hash函数是一系列单向函数,就是这种运算是不可逆的,只可以通过hash运算得到一个hash值,而不能通过hash值得到原始数据。并且经过hash运算后得到的hash值为固定长度。
网站后台一般只储存用户密码的hash值,但也存在一定风险,因为如果黑客拿到了密码的hash后,可以的通过对比已经存在的明文与哈希的对应数据,进行对比,获得明文密码。因此,有了加盐hash,就是随机的在用户密码后加上一段字符后再进行hash运算,由于黑客不知道加的盐是什么,依然无法得到密码。
MD5是hash算法中一种特殊的算法而已,也是hash算法,最后的结果为128个字符,但一般取其中的64或者32位。
最后附上一个在线MD5解密网站,当然MD5是不可逆的,这个网站只是通过查询已经存在的明文密文对照,进行查询操作
http://www.xmd5.org/md5/