0
点赞
收藏
分享

微信扫一扫

python 常见的加密算法

践行数据分析 2022-04-29 阅读 65

序言

加密方式一般都是对二进制编码格式进行加密,在python中是bytes

因此,在对python中数据进行加密,先要将数据转为bytes

pthon中 字符串和bytes互换使用encode() 和decode()方法

常见的编码及加密方法

一.url编码

1、简介

        正常的URL中是只能包含ASCII字符的,也就是字符、数字和一些符号。而URL编码就是一种浏览器用来避免url中出现特殊字符(如汉字)的编码方式。其实就是将超出ASCII范围的字符转换成带%的十六进制格式。

# url 编码
from urllib import parse

a = parse.quote("url编码")
print(a)                # url%E7%BC%96%E7%A0%81  可以看到url没有转化
b = parse.unquote(a)
print(b)                # url编码

二.base64编码

1、简介

        Base64是一种用64个字符来表示任意二进制数据的方法。

        可以将任意的二进制数据进行Base64编码。所有的数据都能被编码为并只用65个字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )

2、Base64编码的原理

        将所有字符转化为ASCII码。
        将ASCII码转化为8位二进制 。
        将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位。
        统一在6位二进制前补两个0凑足8位。
        将补0后的二进制转为十进制。
        从Base64编码表获取十进制对应的Base64编码

三.md5 加密

简介

        MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

# MD5加密

import hashlib
a = 'MD5加密'
hl = hashlib.md5()
hl.update(a.encode("utf8"))
hl_a = hl.hexdigest()   
print(hl_a, a)          #e5c7bda34849527574a025bc06867c11

hl2 = hashlib.md5(bytes('枸杞拌饭',encoding='utf-8'))

''' 
如果加了参数,相当于双层加密,可以防止被撞库
'''
hl2.update(a.encode("utf-8"))
hl2_a = hl2.hexdigest()
print(hl2_a)            # ced6dd2b882dd0730128efc73cd0e8a0

md5的长度,默认为128bit,也就是128个0和1的二进制串。这样表达是很不友好的。所以将二进制转成了16进制,每4个bit表示一个16进制,所以128/4 = 32 换成16进制表示后,为32位了。

为什么网上还有md5是16位的呢?

其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

四.SHA1加密

简介

安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。

SHA1基于MD5,加密后的数据长度更长,比MD5多32位。因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。

SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要

# sha1加密

import hashlib

a = "sha1加密"
sha = hashlib.sha1(a.encode("utf-8")).hexdigest()
print(sha)      # f44e32d79dc660dbbb48006060daf32077045699

"""
当然sha1也可以给一个参数,防止撞库
"""
sha2 = hashlib.sha1('枸杞拌饭'.encode('utf-8'))
sha2.update(a.encode('utf-8'))
print(sha2.hexdigest())  #09394722fcfeb6abc57c1a80b395aef72cb03173

五.HMAC加密

简介

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,由H.Krawezyk,M.Bellare,R.Canetti于1996年提出的一种基于Hash函数和密钥进行消息认证的方法,并于1997年作为RFC2104被公布,并在IPSec和其他网络协议(如SSL)中得以广泛应用,现在已经成为事实上的Internet安全标准。它可以与任何迭代散列函数捆绑使用。

安全性

HMAC算法,它引入了密钥,其安全性已经不完全依赖于所使用的Hash算法,安全性主要有以下几点保证。

(1)使用的密钥是双方事先约定的,第三方不可能知道。作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC 结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。

(2)HMAC与一般的加密重要的区别在于它具有“瞬时"性,即认证只在当时有效,而加密算法被破解后,以前的加密结果就可能被解密。

HMAC的安全性依赖于散列函数H的密码学属性:①抗碰撞属性;②当应用于一个单独的消息分组时H的压缩函数的消息认证属性 。

应用

HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下:

(1)先由客户端向服务器发出一个验证请求。

(2)服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。

(3)客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。

(4)与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户

# hmac加密

import hmac
import hashlib

# 第一个参数是密钥key,第二个参数是待加密的字符串,第三个参数是hash函数
mac = hmac.new('枸杞拌饭'.encode('utf-8'),'sha1加密'.encode('utf-8'), hashlib.sha1)
print(mac.digest())    # 字符串的ascii格式   b'\x8f\x03\xb1\xe4\x8a9\x90/w}\xde\xc5\x92\n&\x82\xe7K\x8b!'
print(mac.hexdigest()) # 加密后字符串的十六进制格式  8f03b1e48a39902f777ddec5920a2682e74b8b21

六.DES加密

简介

        des对称加密:是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码)

七.AES加密

简介

        高级加密标准(英语:Advanced Encryption Standard),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

八.RSA加密

简介

        全称: Rivest-Shamir-Adleman, RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。它被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数字签名的算法,它能够抵抗到目前为止已知的所有密码攻击。

九.ECC加密

简介

        全称:椭圆曲线加密(Elliptic Curve Cryptography),ECC加密算法是一种公钥加密技术,以椭圆曲线理论为基础。利用有限域上椭圆曲线的点构成的Abel群离散对数难解性,实现加密、解密和数字签名。将椭圆曲线中的加法运算与离散对数中的模乘运算相对应,就可以建立基于椭圆曲线的对应密码体制。        

举报

相关推荐

0 条评论