常见的数据加密方式
常见的加密算法基本分为这几类,
线性散列算法(签名算法)MD5,sha1 对称性加密算法 AES DES 非对称性加密算法 RSA
md5加密
MD5是一种被广泛使用的线性散列算法,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)的数据。 解密:
常规讲MD5是不存在解密的。但是理论上MD5是可以进行反向暴力破解的。暴力破解的大致原理就是用很多不同的数据进行加密后跟已有的加密数据进行对比,由此来寻找规律。理论上只要数据量足够庞大MD5是可以被破解的。但是要注意,破解MD5是需要考虑破解的成本(时间和机器性能)。假设破解当前的MD5密码需要目前计算能力最优秀的计算机工作100年才能破解完成。那么当前的MD5密码就是安全的。 增加破解成本的方法
使用一段无意义且随机的私匙进行MD5加密会生成一个加密串,我们暂且称之为串1 将要加密的的数据跟串1拼接,再进行一次MD5,这时会生成串2 将串2再次进行MD5加密,这时生成的串3就是我们加密后的数据。 我们在注册账号时的密码一般都是用的MD5加密。
import hashlib
h = hashlib. md5( )
str = 'boboadmin'
h. update( str . encode( ) )
msg = h. hexdigest( )
print ( msg)
Base64伪加密
Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法。只是看上去像是加密而已。 Base64使用A–Z,a–z,0–9,+,/ 这64个字符实现对数据进行加密。
import base64
str = 'admin'
str = str . encode( 'utf-8' )
bs64= base64. b64encode( str )
print ( bs64)
debs64= base64. b64decode( bs64)
print ( debs64. decode( ) )
DES/AES
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的算法。该加密算法是一种对称加密方式,其加密运算、解密运算需要使用的是同样的密钥(一组字符串)即可。 注意:
现在用AES这个标准来替代原先的DES。 AES和DES的区别:
加密后密文长度的不同:
DES加密后密文长度是8的整数倍 AES加密后密文长度是16的整数倍 应用场景的不同:
企业级开发使用DES足够安全 如果要求高使用AES 使用DES/AES进行数据交互时要求双方都拥有相同的私匙 破解方法:
暴力破解 DES如果使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。只要计算足够强大是可以被破解的
import binascii
from pyDes import des, CBC, PAD_PKCS5
def des_encrypt ( secret_key, s) :
iv = secret_key
k = des( secret_key, CBC, iv, pad= None , padmode= PAD_PKCS5)
en = k. encrypt( s, padmode= PAD_PKCS5)
return binascii. b2a_hex( en)
def des_decrypt ( secret_key, s) :
iv = secret_key
k = des( secret_key, CBC, iv, pad = None , padmode = PAD_PKCS5)
de = k. decrypt( binascii. a2b_hex( s) , padmode = PAD_PKCS5)
return de
secret_str = des_encrypt( '12345678' , 'I love YOU~' )
print ( secret_str)
clear_str = des_decrypt( '12345678' , secret_str)
print ( clear_str)
RSA
RSA加密:
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。 非对称加密算法:
非对称加密算法需要两个密钥:
公开密钥(publickey:简称公钥) 私有密钥(privatekey:简称私钥) 公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 注意:
使用时都是使用公匙加密使用私匙解密。公匙可以公开,私匙自己保留。 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。 使用流程和场景介绍
通过公匙加密,使用私匙解密。私匙是通过公匙计算生成的。假设ABC三方之间相互要进行加密通信。大家相互之间使用公匙进行信息加密,信息读取时使用各自对应的私匙进行信息解密 用户输入的支付密码会通过RSA加密 公钥私钥生成方式:
公私匙可以在线生成
[http://web.chacuo.net/netrsakeypair]
import rsa
def rsaEncrypt ( str ) :
( pubkey, privkey) = rsa. newkeys( 512 )
print ( "pub:" , pubkey)
print ( "priv:" , privkey)
content = str . encode( 'utf-8' )
crypto= rsa. encrypt( content, pubkey)
return ( crypto, privkey)
def rsaDecrypt ( str , pk) :
content = rsa. decrypt( str , pk)
con= content. decode( 'utf-8' )
return con
( deData, privKey) = rsaEncrypt( "hello" )
print ( '加密后的密文' , deData)
content = rsaDecrypt( deData, privKey)
print ( content)