0%

密码类型

对称密码算法

对称算法是指加密秘钥和解密秘钥相同的密码算法,又称为秘密秘钥算法单密钥算法

分组密码算法

又称块密码算法

加密步骤一:将明文拆分为 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算法生成秘钥对实例对象:1024是秘钥的长度
rsa = RSA.generate(1024, random_generator)

#生成私钥并保存到pem文件,如果知道秘钥值key3也可以不保存,拼接上begin/end标识后加载直接用,如key3 = '-----BEGIN PUBLIC KEY-----\n' + key3 + '\n' + '-----END PUBLIC KEY-----'
private_pem = rsa.exportKey()
with open("private.pem", "wb") as f:#wb,以二进制格式写入文件
f.write(private_pem)

#生成公钥并保存到pem文件,当然也可以不保存直接用,即key1
public_pem = rsa.publickey().exportKey()
with open("public.pem", "wb") as f: #wb,以二进制格式写入文件
f.write(public_pem)

#plaintext:需要加密的明文文本,公钥加密,私钥解密
plaintext = '123456'

#加密过程
# 1:加载公钥
with open("public.pem") as f1:
key1 = f1.read() #从pem文件中读取公钥内容,包括begin头/end尾标识
public_key = RSA.import_key(key1) #加载公钥key1

#:2:加密
cipher_rsa = PKCS1_v1_5.new(public_key)
cipher_text = base64.b64encode(cipher_rsa.encrypt(plaintext.encode('utf-8'))) #cipher_text 即为加密后的密文
#打印加密结果
print(cipher_text.decode('utf-8'))#Python3的字符串的编码语言用的是unicode编码,由于Python的字符串类型是str,如果直接打印出来print(cipher_text),会是b'字符串',解决方案是后面添加decode('utf-8')


# 读取私钥
with open("private.pem") as f2:
key2 = f2.read()#从pem文件中读取私钥内容,包括begin头/end尾标识
private_key = RSA.import_key(key2)#加载私钥key2

# 解密
cipher_rsa = PKCS1_v1_5.new(private_key)
text = cipher_rsa.decrypt(base64.b64decode(cipher_text),random_generator)
#打印解密结果
print(text.decode('utf-8'))#Python3的字符串的编码语言用的是unicode编码,由于Python的字符串类型是str,如果直接打印出来print(text),会是b'字符串',解决方案是后面添加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!'

# 创建 SHA-256 哈希对象
hash_object = hashlib.sha256()

# 对数据进行哈希计算
hash_object.update(data)

# 获取哈希值
hash_value = hash_object.hexdigest()

print(hash_value) # 输出哈希值