Python常见的几种数据加密方式

 更新时间:2022年06月06日 11:19:52   作者:就在日落之前  
这篇文章主要分享的是Python常见的几种数据加密方式,主要包括线性散列算法(签名算法)MD5,sha1、对称性加密算法 AES DES、非对称性加密算法 RSA,具体详细内容介绍,需要的小伙伴可以参考一下

前言:

常见的加密算法基本分为这几类:

  • 线性散列算法(签名算法)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 hashlibh = hashlib.md5()
str = 'boboadmin'
h.update(str.encode())
msg = h.hexdigest()
print(msg)

SHA1安全哈希算法

SHA1比MD5的安全性更强,但也比MD5慢

import hashlib
sha1 = hashlib.sha1()
data = '2333333'
sha1.update(data.encode('utf-8'))
sha1_data = sha1.hexdigest()
print(sha1_data)

二、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 次方个。只要计算足够强大是可以被破解的
#需要下载安装pyDes模块
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 desecret_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)

到此这篇关于Python常见的几种数据加密方式的文章就介绍到这了,更多相关Python 数据加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python编程获取终端命令行参数示例

    Python编程获取终端命令行参数示例

    这篇文章主要为大家介绍了Python编程获取终端命令行参数示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python集合魔法解锁数据去重技巧应用实例

    Python集合魔法解锁数据去重技巧应用实例

    这篇文章主要为大家介绍了Python集合魔法解锁数据去重技巧应用实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python实现opencv+scoket网络实时图传

    python实现opencv+scoket网络实时图传

    这篇文章主要为大家详细介绍了python实现opencv+scoket网络实时图传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 使用keras实现非线性回归(两种加激活函数的方式)

    使用keras实现非线性回归(两种加激活函数的方式)

    这篇文章主要介绍了使用keras实现非线性回归(两种加激活函数的方式),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python利用装饰器实现类似于flask路由

    Python利用装饰器实现类似于flask路由

    这篇文章主要为大家详细介绍了Python如何利用装饰器实现类似于flask路由,文中的示例代码讲解详细,对我们深入了解Python有一点的帮助,感兴趣的可以了解一下
    2023-02-02
  • python中Task封装协程的知识点总结

    python中Task封装协程的知识点总结

    在本篇内容里小编给大家总结的是一篇关于python中Task封装协程的知识点总结内容,有兴趣的朋友们可以跟着学习下。
    2021-07-07
  • python 图片验证码代码

    python 图片验证码代码

    在网络应用中,验证码常常作为一个必备的手段,用来避免机器人恶意注册,保证坐在浏览器前的是一个人。
    2008-12-12
  • Python的线程使用队列Queue来改造转账场景

    Python的线程使用队列Queue来改造转账场景

    前篇我们了队列Queue和转账场景这次趁热学委展示一下使用队列解决转账场景的问题,这篇文章主要介绍了Python的线程使用队列来改造转账场景,需要的朋友可以参考一下
    2022-02-02
  • python实现一个点绕另一个点旋转后的坐标

    python实现一个点绕另一个点旋转后的坐标

    今天小编就为大家分享一篇python实现一个点绕另一个点旋转后的坐标,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • django项目搭建与Session使用详解

    django项目搭建与Session使用详解

    这篇文章主要给大家介绍了关于django项目搭建与Session使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10

最新评论