欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

12:字符串加密、解密

程序员文章站 2024-03-14 17:32:22
...

1、字符串的编码、解码

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

二进制: 0/1 每一个二进制数字,表示一位,通常计算机中:0000 0001
字节: 二进制数据~8位一个字节:0000 0001->1个字节
字符: 2个字节->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 解码:将一个二进制数据按照指定的编码~解码成自然数据

s = “大天朝”   s:<class ‘str’>
x = s.encode(“utf-8”)   x:<class ‘bytes’>
x-> b’\xb9\x00\xa5..’

x2 = x.decode(“utf-8”)  x2:<class ‘str’>
x2 -> “大天朝”

2、加密解密操作:

什么是加密:将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据,这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为**
什么是解密:按照指定的算法和关键数据,将一个密文数据进行逆向运算得到正确的明文数据的过程成为解密操作


(1)、单向加密算法:只能加密,不能解密的算法
如:用户账号密码(单向加密)存储,此时任何人都不能查看该用户的明文密码
流程->用户输入明文密码->加密->和存储的密文密码进行比较->相等-成功
单向散列加密算法-> MD5加密
单项哈希加密算法-> SHAX加密


(2)、双向加密算法:可以加密,加密的数据可以解密得到明文数据
使用在更多的场景;数据进行加密传输->目标地址->解密得到明文数据进行处理
对称加密:加密和解密使用相同的秘钥;
非对称加密:加密和解密使用不同的秘钥;如HTTPS传输数据


python中的hashlib模块

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

import hashlib

string = "beyongjie"

md5 = hashlib.md5()
md5.update(string.encode('utf-8'))     #注意将字符串转码
res = md5.hexdigest() #加密后的字符串
print("md5加密结果:",res)

#其他加密都差不多

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

TypeError: Unicode-objects must be encoded before hashing

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

  • 可以使用encode进行转换
string = "beyongjie"
shaa1 = hashlib.sha1()
shaa1.update(string.encode('utf-8'))
res = shaa1.hexdigest()
print("sha1采用encode转换加密结果:",res)
  • 或者使用byte转换为二进制
shab1 = hashlib.sha1()
shab1.update(bytes(string,encoding='utf-8'))
res = shab1.hexdigest()
print("sha1采用byte转换的结果:",res)