一.概念和作用
概念
加密解密:一个信息干扰的过程,保证固定的人才可以看到你的信息
把重要的数据变为乱码(加密)传送,
到达目的地后再用相同或不同的手段还原(解密)
作用
网络信息传输安全涉及到很多个方面,其中主要有三个要解决的问题:
- 保密性(Confidentiality):信息在传输时不被泄露
- 完整性(Integrity):信息在传输时不被篡改
- 有效性(Availability):信息的使用者是合法的
常用加密方式
数据加密方式 | 描述 | 主要解决的问题 | 常用算法 |
---|---|---|---|
对称加密 | 指数据加密和解密使用相同的密钥 | 数据的机密性 | DES, AES |
非对称加密 | 也叫公钥加密,指数据加密和解密使用不同的密钥–密钥对儿 | 身份验证 | DSA,RSA |
单向加密 | 指只能加密数据,而不能解密数据 | 数据的完整性 | MD5,SHA系列算法 |
二.字符编码
进制
编码为了让数字能代表一个符号,所以才有对应的编码号,所以每个编码号都是代表十进制的形式来让人们认识的,但是为了保存数据,计算机用进制做代表来存储,但是可以以各种进制来表示,但二进制是最小的单位,1kbit存储量代表能存1000个二进制数字,但指会以8倍为一组。二进制变化的范围最大就是256个种类00000000到11111111,所以目前所有录入的不包括汉字。汉字解析的ascii码号太多,所以就不止占一个字节。
但是,计算机存储的时候用二进制,但是显示二进制的数值就再不是二进制了。内存读取他的时候又把他当作数字了,是一个占8个字节的数字。所以看一大堆二进制数据的时候会特别卡。
所以汉字、符号等都要先编码,然后才能用编码的对应号数去转成二进制,进制转换只对数字有用。
一个字节是计算机内存的最小单位,由8个二进制位组成,2个16进制组成
F=0000 1111 =15
FF=1111 1111 =255
十进制 | 十六进制 | 二进制 |
---|---|---|
0 | 0 | 0000 0000 |
1 | 1 | 0000 0001 |
2 | 2 | 0000 0010 |
3 | 3 | 0000 0011 |
4 | 4 | 0000 0100 |
5 | 5 | 0000 0101 |
6 | 6 | 0000 0110 |
7 | 7 | 0000 0111 |
8 | 8 | 0000 1000 |
9 | 9 | 0000 1001 |
10 | A | 0000 1010 |
11 | B | 0000 1011 |
12 | C | 0000 1100 |
13 | D | 0000 1101 |
14 | E | 0000 1110 |
15 | F | 0000 1111 |
进制间转换方法
十进制与二进制
>>> bin(255) #十进制转二进制
'0b11111111'
>>> int("0b11111111",2) #二进制转十进制
255
十进制与十六进制
>>> hex(255) #十进制转十六进制
'0xff'
>>> int("0xff",16) #十六进制转十进制
255
八进制转换:oct(255)
括号里加什么进制数都可以变成所用方法的对应进制数
unicode
字符和unicode编号是一一对应的关系,世界上的每个字符都对应着一个unicode编号,根据编号可以进行多种编码。utf-8,utf-16,utf-32…,gbk编码等
>>> ord("中")
20013
>>> chr(20013)
'中'
>>> "中".encode("utf-8") #汉字中utf-8编码
b'\xe4\xb8\xad'
>>> "中".encode("gbk") #汉字中 gbk编码
b'\xd6\xd0'
b’······‘.decode()默认是utf-8来解码,如果解不出代表数据不是utf-8的
ascii比较局限于英语,所以汉字其他多种语言用unicode更好。unicode收录了所有语言,字–码值–编号,为一组统一收录。
三.Base64编码原理
概念
Base64就是一种基于64个可打印字符来表示二进制数据的方法(只能拿二进制的数据来作转换)
作用
-
在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。
-
网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。
实例:
- 电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。
- 对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。
- 电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。
Base64编码表
文本到base64格式的转换
#ASCII码
>>> ord("M")
77
>>> ord("a")
97
>>> ord("n")
110
#ASCII转二进制
>>> bin(77)
'0b1001101'
>>> bin