12:字符串加密、解密

Python011

12:字符串加密、解密,第1张

编码: 将计算机中的字符串按照一定的顺序表示成二进制数据的过程

各国字符编码都不一样:

1、计算机->表示[英文字母、数字、部分特殊符号]-> ascii编码 [0~256]

2、万国码,统一字符编码[号称可以统一全球范围内任何语言的表示方式]

任何语言中的任何数据,都可以使用一个字符来表示 unicode编码

3、中国有GB2312->GBK ->GB18030

4、数据传输编码:unicode transfer format 8 bit [UTF-8]

python中的编码解码:

要命的规则:字符串的编码解码,一直都是任何语言中一个难点和重点

任何字符串->都是由字节组成的!

python3中:字符:(str);字节(bytes)

字符->字节:encode 编码:将一个字符串编码成计算机可以操作的二进制数据

字节->字符:decode 解码:将一个二进制数据按照指定的编码~解码成自然数据

什么是加密: 将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥

什么是解密: 按照指定的算法和关键数据,将一个密文数据进行逆向运算得到正确的明文数据的过程成为解密操作

(1)、单向加密算法:只能加密,不能解密的算法

如:用户账号密码(单向加密)存储,此时任何人都不能查看该用户的明文密码

流程->用户输入明文密码->加密->和存储的密文密码进行比较->相等-成功

单向散列加密算法->MD5加密

单项哈希加密算法->SHAX加密

(2)、双向加密算法:可以加密,加密的数据可以解密得到明文数据

使用在更多的场景;数据进行加密传输->目标地址->解密得到明文数据进行处理

对称加密:加密和解密使用相同的秘钥;

非对称加密:加密和解密使用不同的秘钥;如HTTPS传输数据

hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法

注意: hashlib 加密啊的字符串类型为二进制编码,直接加密字符串会报如下错误:

有两种方式可以将字符串转化为二进制数据

加密是将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥。

解密是按照制定的算法和关键数据,将一个密文数据进行逆向运算得到的正确的明文数据的过程

如:用户账号密码存储,此时任何人都不能查看该用户的明文密码

1.原始数据

2.编码(转换为字节数据)

3.使用算法加密

4.利用盐值更新密文

5.得到加密后的数据

编码:字符串.encode(编码名称)——>字节数据

解码:字节数据.decode(编码名称)——>字符串数据

==========================================

简单模式:

from hashlib import md5

def md5_file(name):

m = md5()

a_file = open(name, 'rb') #需要使用二进制格式读取文件内容

m.update(a_file.read())

a_file.close()

return m.hexdigest()

if __main__ == '__init__':

print md5_file('d:/test.txt')

大文件速度更快一点的方式

#!/usr/bin/python

#encoding=utf-8

import io

import sys

import hashlib

import string

def printUsage():

print ('''''Usage: [python] pymd5sum.py ''')

def main():

if(sys.argv.__len__()==2):

#print(sys.argv[1])

m = hashlib.md5()

file = io.FileIO(sys.argv[1],'r')

bytes = file.read(1024)

while(bytes != b''):

m.update(bytes)

bytes = file.read(1024)

file.close()

#md5value = ""

md5value = m.hexdigest()

print(md5value+"\t"+sys.argv[1])

#dest = io.FileIO(sys.argv[1]+".CHECKSUM.md5",'w')

#dest.write(md5value)

#dest.close()

else:

printUsage()

main()