对称密码算法
对称算法是指加密秘钥和解密秘钥相同的密码算法,又称为秘密秘钥算法或单密钥算法
分组密码算法
又称块密码算法
加密步骤一:将明文拆分为 N 个固定长度的明文块
加密步骤二:用相同的秘钥和算法对每个明文块加密得到 N 个等长的密文块
加密步骤三:然后将 N 个密文块按照顺序组合起来得到密文
常见算法:AES(安全强度较高,应用范围较广)、SM1、SM4、DES/3DES(已被淘汰或逐步淘汰)
流密码算法
又称序列密码算法
加密:每次只加密一位或一字节明文
解密:每次只解密一位或一字节密文
常见算法:RC4
非对称密码算法
非对称算法是指加密秘钥和解密秘钥不同的密码算法,又称公开密码算法或公钥算法,使用一个密钥进行加密,用另一个进行解密
加密秘钥可以公开,又称为公钥
解密秘钥必须保密,又称为私钥
常见非对称算法包括 RSA、SM2、DH、DSA、ECDSA、ECC
python crypto模块实现RSA加密
1、安装模块
pip install pycryptodome
2、实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| from Crypto import Random from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64
random_generator = Random.new().read
rsa = RSA.generate(1024, random_generator)
private_pem = rsa.exportKey() with open("private.pem", "wb") as f: f.write(private_pem)
public_pem = rsa.publickey().exportKey() with open("public.pem", "wb") as f: f.write(public_pem)
plaintext = '123456'
with open("public.pem") as f1: key1 = f1.read() public_key = RSA.import_key(key1)
cipher_rsa = PKCS1_v1_5.new(public_key) cipher_text = base64.b64encode(cipher_rsa.encrypt(plaintext.encode('utf-8')))
print(cipher_text.decode('utf-8'))
with open("private.pem") as f2: key2 = f2.read() private_key = RSA.import_key(key2)
cipher_rsa = PKCS1_v1_5.new(private_key) text = cipher_rsa.decrypt(base64.b64decode(cipher_text),random_generator)
print(text.decode('utf-8'))
|
摘要算法
摘要算法是指把任意长度的输入消息数据转化为固定长度的输出数据的一种密码算法,又称为散列函数、哈希函数、杂凑函数、单向函数
摘要算法所产生的固定长度的输出数据称为 摘要值 、 散列值 或 哈希值 ,摘要算法无秘钥。
摘要算法 通常用来做数据完整性的判定,即对数据进行哈希计算然后比较 摘要值 是否一致。
摘要算法主要分为三大类:MD(Message Digest,消息摘要算法)、SHA-1(Secure Hash Algorithm,安全散列算法)和 MAC(Message Authentication Code,消息认证码算法
MD系列主要包括 MD2、MD4、MD5
SHA系列主要包括SHA-1、SHA-2 系列(SHA-1 的衍生算法,包含 SHA-224、SHA-256、SHA-384、SHA-512)
MAC系列主要包括HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384 和 HmacSHA512 算法
python语言实现sha256加密
SHA256原理详细讲解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import hashlib
data = b'Hello, World!'
hash_object = hashlib.sha256()
hash_object.update(data)
hash_value = hash_object.hexdigest() print(hash_value)
|