python3之加密解密操作

加密解密操作

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

加密操作步骤

  1. 原始 明文数据 s = “hello”
  2. 编码->字节数据,s = s.encode(“utf-8”)
  3. md5/shax(字节数据)->密文对象,x = hashlib.md5(s)
  4. 密文对象.update(密钥/盐值/混淆码)-> 更新之后的密文对象,x.update(‘^#@JDDf’)
  5. 得到混淆之后的密文数据,x.hexdigest(),得到密文》‘ba65a656f6b12312ab12d23’

单向加密算法:只能加密,不能解密的算法

如:用户账号密码(单向加密)存储,此时任何人都不能查看该用户的明文密码。流程->用户输入明文密码->加密->和存储的密文密码进行比较->相等-成功。
python中的加密操作:hashlib。
单向散列算法加密:比较经典的有MD5加密[数字指纹], Returns a md5 hash object。

from hashlib import md5
a = "明文"
m = md5()
m.update(a)
Traceback (most recent call last):
  File "D:\conda\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-49-6aa158bc3233>", line 1, in <module>
    m.update(a)
TypeError: Unicode-objects must be encoded before hashing
## 设置编码
m.update(a.encode('utf8'))
m
Out[51]: <md5 HASH object @ 0x00000224EAF52F30>
m.hexdigest()
Out[52]: 'e6c2860f3a8fa2aa6224ab17e9fac946'
m.digest()
Out[53]: b'\xe6\xc2\x86\x0f:\x8f\xa2\xaab$\xab\x17\xe9\xfa\xc9F'

##
md5(a.encode('utf8')).hexdigest()
Out[54]: 'e6c2860f3a8fa2aa6224ab17e9fac946'

## 
import hashlib
hashlib.new('md5', a.encode('utf8')).hexdigest()
Out[56]: 'e6c2860f3a8fa2aa6224ab17e9fac946'

hmac加密

import hmac
# hmac加密,这种方法使用了对称加密和hash,安全性更高
def hmac_by_md5(pwd):
    # 参数:加密字符、盐值、加密方式
    return hmac.new(pwd.encode('utf-8'), MD5_SALT.encode("utf-8"), "MD5").hexdigest()

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

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

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

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

python标准库(standand library):base64,一般称它为编码解码,不称它为加密解密。经常出现在web中。

>>> import base64
>>> dir(base64)
['MAXBINSIZE', 'MAXLINESIZE', '_85encode', '_A85END','_A85START',
 '__all__', '__builtins__', '__cached__','__doc__', '__file__',
 '__loader__', '__name__','__package__', '__spec__', '_a85chars',
 '_a85chars2','_b32alphabet', '_b32rev', '_b32tab2', '_b85alphabet',
 '_b85chars', '_b85chars2', '_b85dec', '_bytes_from_decode_data',
 '_input_type_check','_urlsafe_decode_translation',
 '_urlsafe_encode_translation','a85decode', 'a85encode', 'b16decode',
 'b85decode', 'b85encode', 'binascii', 'bytes_types', 'decode',
 'main', 're', 'standard_b64decode', 'standard_b64encode', 'struct',
 'test', 'urlsafe_b64decode', 'urlsafe_b64encode']
>>>
>>> help(base64.b64encode)
Help on function b64encode in module base64:
b64encode(s, altchars=None)
    Encode the bytes-like object s using Base64 and return a bytes object.

    Optional altchars should be a byte string of length 2 which specifies an
    alternative alphabet for the '+' and '/' characters.  This allows an
    application to e.g. generate url or filesystem safe Base64 strings.
>>>

base64案例:

>>> import base64
>>> src = "明文数据"
>>> tgt = base64.b64encode(src.encode('UTF-8')) #编码->like 加密
>>> tgt  # 查看
b'5piO5paH5pWw5o2u'
>>>
>>> src = base64.b64decode(tgt).decode('utf-8')
>>> src  # 查看
'明文数据'
>>>

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值