密码学
- 维吉尼亚密码:
在凯撒密码基础上的一种变体,只不过对于每个明文字母来说秘钥长度可能是不一样的
- 费纳姆密码:
采用二进制表示,加密时要将明文和秘钥都转换成7位二进制数,异或得到密文。解密将密文7个为一组,然后与秘钥异或,再讲结果转换成ascii
- 列置换加密:
将明文按行填写在一个矩阵,然后按照预定的顺序按列读取得到密文。列置换的秘钥通常会以一个单词的形式给出,如nice(相当于4312)按照每个字符在字母表中出现的前后顺序来排列。秘钥有几位数解密采用的矩阵就是几列,加密时首先去除铭文中的空格,然后依次填入一个4列的矩阵的,最后一行不足的部分可以留空(或用@等符号补全),按照秘钥的顺序一次读取
- Polybius(波利比奥斯密码):
又称棋盘密码。将给定的密文加密为两两组合的数字。
比如,HELLO加密后是23 15 31 31 34
补充ADFGX密码:
可以看做是Polybius的升级版,用ADFGX代换了五个数字
- Brainfuck
它是一种极小化的计算机语言,按照"Turing complete(完整图灵机) "思想设计 的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语 言,只有八种符号,所有的操作都由这八种符号 > < + - . , [ ] 的组合来完成。
6.二进制幂数加密:
由于英文字母只有26个字母,由公式可知,只要2的0、1、2、3、4、5次幂就可以表示31个单元。通过用二进制幂数表示字母序号数来加密。4=2^2 所以D加密过之后是2;15=2^0+2^1+2^2+2^3所以O加密后是0123
7.仿射加密:
仿射加密则是将铭文与密钥的一部分相乘然后加上密钥的另一部分。为便于计算将26个英文字母用数字表示:a=0,b=1.....z=25密钥有两个:a和b,取值范围是[0,25]。要求a和26互质。比如x是明文y是密文,加密公式是y=(ax+b)mod26.a=7,b=3假设明文为c,x=2,y=17,密文就是r
8.培根密码:
是一种简单的替换密码,密文字符只有两个:a,b;每个明文资福都会被替换成为一个有a,b组成的长度为5的字符串。若看到全部铭文都是由两种字符构成的密文可以猜测其是培根密码。
9.轮转机加密:
杰斐逊轮转加密器,这个装置由36篇同样大小的木制转轮,套在一根铁杆上,没票轮转的圆周边缘上刻有乱序的26个英文字母表。驾麋芳转动加密器上的转轮使明文(不超过36字)正好出现在同一行上,这时转轮上排列的其他25行都是无意义的乱码,吧其中一行抄写下来得到密文。接收方街道密文转动加密器上的转轮使得密文正好出现再同一行,然后查看其他25行上的内容,其中有意义的就是铭文。
10.ROT13:
凯撒密码的变体,间隔数是13.PHP中的str_rot13()函数可以实现rot13加密。
11.RSA攻击
分类:模数分解,低加密指数分解,低加密指数广播攻击,低解密指数攻击,共模攻击
m代表我们要加密的文明,c代表我们加密后的密文,p和q是我们随机找的大素数,n代表p和q的乘积称为模数,e是我们找到的和(p-1)(q-1)互质的数称为加密指数
当前汉字有多少笔画出头,就转化成数字几。
如: 王夫 井工 夫口 由中人 井中 夫夫 由中大
转换为数字:67 84 70 123 82 77 125
13.Jjencode
jjencode 将 JS 代码转换成只有符号的字符串,类似于 rrencode。aaencode 可以将 JS 代码转换成常用的网络表情,也就是我们说的颜文字 js 加密
14.加盐hash
网站后台一般只储存用户密码的hash值,存在一定风险,因为如果黑客拿到了密码的hash后,可以的通过对比已经存在的明文与哈希的对应数据,进行对比获得明文密码。因此。加盐hash,就是随机的在用户密码后加上一段字符后再进行hash运算,由于黑客不知道加的盐是什么,依然无法得到密码。
编码
(一):base家族
Base16:就是十六进制数,0-9,A-F
Base32:小写字母,234567
Base64:将二进制数编码成字符,大小写字母,0-9+/,还可能会使用=作为后缀,但是=并不是必须的,只有编码后位数不是4的倍数的时候才会用=作为后缀
Base85:大小写字母,0-9和23个字符!&@#%()*+-;<=>_~{}|
在ASCII码表中,算上空格, 从32到126共95个是可见字符,不算上空格则为94个。也叫打印字符,即可以被直接打印出来的字符。剩下的则是不可见字符,即不可以被直接打印出来
(二):url编码
url编码(%加十六进制数)如果要传入的参数包含=或者&字符可以对其进行编码,URL编码格式:%十六进制ASCII码,如&的URL编码是%26。传输容易引起歧义的字符时需要编码。若在URL中对一些ascii标准字符进行了URL编码,浏览器会自动将其解码。如果在URL当中需要传输中文也必须要经过URL编码。+比较特殊,它在URL当中会被视为空格。URL 编码将字符转换为可通过因特网传输的格式。URL 只能使用 ASCII 字符集 通过因特网进行发送。由于 URL 通常包含 ASCII 集之外的字符,因此必须将 URL 转换为有效的 ASCII 格式。URL 编码使用后跟十六进制数字的 "%" 替代不安全的 ASCII 字符。URL 不能包含空格。URL 编码通常使用加号(+)或 %20 替代空格。
Python3默认采用Unicode,Python2默认采用ascii
(三):Unicode编码
Unicode编码包含世界所有文化、所有字符的编码方案。在不同的应用场合所采用的表示方法也不一样,常见的四种表示方法:&#[HEX], &#[DEC],\U[HEX],\U+[HEX].前两种主要用在网页上,可以直接放到HTML中解析
(四):UTF编码
Unicode只是对所有字符进行了编码但没有规定如何存储和传输。UTF编码即Unicode Transformation Format,Unicode的转换格式。UTF-8是一种可变唱的编码方式,用1-6个字节表示一个符号。英文字母被编码成一个字节,汉字通常是3个字节,生僻字才会被编码成4-6个字节。如果字节的第一位是0则这个字节单独就是一个字符,若第一个是1,连续有多少个1就表示当前字符占多少字节。当数据在计算机内存中被处理时,统一用Unicode,需要存到硬盘或者传输的时候需转换为utf-8
(五):jjencode aaencode
jjencode代码,就是将正常的js代码转换成复杂的只有符号的字符串编码,
进行加密 如:[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$这样的组合。
aaencode代码,则是将正常的js代码转为好玩的特殊网络表情符号。
如: ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) 这样的表情文字