1. Hash加密
对明文进行Hash加密,得到密文,但是密文不能解密为明文。
例如:Md5 sha1等
2. 对称加密
使用密钥,对明文进行加密,得到密文
使用密钥,对密文进行解密,得到明文
例如 AES
3. 非对称加密
有密钥和公钥。
公钥是所有人都可以看到的。
密钥只有自己拥有。
使用公钥,对明文进行加密,得到密文。
使用密钥,对密文进行解密,得到明文。
例如RSA
4.RSA算法
1.生成公钥和密钥
-
安装openssl
yum install openssl
-
生成私钥
openssl genrsa -out private.pem 1024
- genrsa 表示使用rsa算法
- -out 表示输出到文件
- 1024 表示私钥的长度
-
生成公钥
openssl rsa -in private.pem -pubout -out public.pem
- private.pem 是私钥的文件地址
2. 加密和解密
1.公钥加密,私钥解密
from M2Crypto import RSA
msg = 'aaaa-aaaa'
rsa_pub = RSA.load_pub_key('public.pem')
rsa_pri = RSA.load_key('private.pem')
print '公钥加密'
en_msg=rsa_pub.public_encrypt(msg,RSA.pkcs1_padding)
en_msg64=en_msg.encode('base64')
print '密文base64',en_msg64
print '私钥解密'
de_msg=rsa_pri.private_decrypt(en_msg,RSA.pkcs1_padding)
print '明文',de_msg
这个用于加密传输的数据。例如A用公钥加密信息,传送给B,只要B有私钥,才能解密。
2.私钥加密,公钥解密
print '###################################'
print '私钥加密'
en_msg=rsa_pri.private_encrypt(msg, RSA.pkcs1_padding)
en_msg64=en_msg.encode('base64')
print '密文base64',en_msg64
print '公钥解密'
de_msg=rsa_pub.public_decrypt(en_msg,RSA.pkcs1_padding)
print '明文',de_msg
这个用于生成数字签名。也就是证明数据是私钥拥有者发送的,而且未被修改。
例如
- B对发送给A的数据DATA,进行hash加密,得到HASH,
- B使用私钥对HASH加密,得到EN_HASH(这个就是数字签名),
- B发送DATA和EN_HASH给A
- A使用公钥解密EN_HASH,如果成功,表示这个数据是B发送的,否则就不是
- A对DATA进行hash加密,得到HASH1,如果HASH1和HASH相同,表示DATA没有被修改,否则就是修改了。
由于所有人都有公钥,所有人都能解密,所以如果这个方法不能用来加密数据。
未经允许,请不要转发