python - 密码加密与解密

news2024/9/22 7:37:27

Python之密码加密与解密 - 对称算法

  • 一、对称加密
    • 1.1 安装第三方库 - PyCrypto
    • 1.2 加密实现
  • 二、非对称加密
  • 三、摘要算法
    • 3.1 md5加密
    • 3.2 sha1加密
    • 3.3 sha256加密
    • 3.4 sha384加密
    • 3.5 sha512加密
    • 3.6 “加盐”加密

  由于计算机软件的非法复制,通信的泄密、数据安全受到威胁。一般为了安全,会要求将数据库名称、密码等信息进行加密。所以加密在开发过程中是经常使用到的技术,在一些重要场景中都有所应用,如:登录、支付、oauth等,场景不同需要搭配不一样的签名加密算法来达到业务目标。项目中用到了python端,需要用到python对密码的加密解密模块。
  加密算法分散列算法、对称加密、非对称加密。参考网上资料,初步将密码管理的逻辑思路整理了一下。

一、对称加密

  就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。常见的对称算法有AES、DES、3DES等。

1.1 安装第三方库 - PyCrypto

  对于对称加密或非对称都需要安装第三方库,Python中的密码库是PyCrypto,但在2012年已停止更新,现在使用 PyCrytodome 取代 PyCrypto 。
  window下安装pycryptodemo,linux下安装pycrypto

pip install pycryptodome

示例如下:
1

1.2 加密实现

  AES算法是目前应用最广泛的加密算法。AES有5种加密模式,分别是ECB, CBC, CTR, CFB, OFB。下面以AES的ECB模式为例,同样AES也需要加密秘钥aes_key,需要注意的是如果加密数据不足16或32位时需要补足为它们的倍数,下面以16的倍数为例:

  1. 先创建函数,不全数据不足16倍数的部分
def addStrToSpecifyLen(s,specifyLen=0):
    """
    s不是specifyLen的倍数那就补足为specifyLen的倍数
    :param s: 需要加密的参数
    :param specifyLen: 指定参数的位数
    :return: 补足位数的参数
    """
    if specifyLen <= 0:
        specifyLen = 1;
    while len(s) % specifyLen != 0:
        s += '\0'
    return s.encode(encoding='utf-8')
  1. 加密算法 - aes
def encrypt_aes(text='', key=''):
    """
    aes的ecb模式加密
    :param data: 加密数据
    :param aes_key: 加密的秘钥
    :return: 加密之后的密文
    """
    # 初始化加密器
    aes = AES.new(addStrToSpecifyLen(key,16), AES.MODE_ECB)
    # 先进行aes加密
    encrypt = aes.encrypt(addStrToSpecifyLen(text,16))
    # 用base64转成字符串形式
    encrypted_text = str(base64.encodebytes(encrypt), encoding='utf-8')  # 执行加密并转码返回bytes
    return encrypted_text
  1. 解密算法
def decrypt_aes(data, aes_key):
    """
    aes的ecb模式解密
    :param data: 待解密数据
    :param aes_key: 加密的秘钥
    :return: 解密之后的数据
    """
    # 初始化加密器
    aes = AES.new(addStrToSpecifyLen(aes_key,16), AES.MODE_ECB)
    #优先逆向解密base64成bytes
    base64_decrypted = base64.decodebytes(addStrToSpecifyLen(data,16))
    #执行解密密并转码返回str
    decrypted_text = str(aes.decrypt(base64_decrypted),encoding='utf-8').replace('\0','')
    return decrypted_text
  1. 测试输出如下:
if __name__ == '__main__':
    key = '12223'
    data = 'test12dcds'
    encrypt = encrypt_aes(data,key)
    print(encrypt)
    print(decrypt_aes(encrypt,key))

2

二、非对称加密

  与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。常见的非对称算法有RSA、DSA、ECC等。

三、摘要算法

  Python的hashlib提供了常见的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
   一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。
   摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。散列算法加密数据一般采用base64编码格式。常用的散列算示例如下:

3.1 md5加密

 是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

import hashlib
hash = hashlib.md5()
hash.update("mayi".encode("utf-8"))
# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())

3.2 sha1加密

 SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。

import hashlib
hash = hashlib.sha1()
hash.update("mayi".encode("utf-8"))
# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())

3.3 sha256加密

比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

import hashlib
hash = hashlib.sha256()
hash.update("mayi".encode("utf-8"))
# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())

3.4 sha384加密

import hashlib
hash = hashlib.sha384()
hash.update("mayi".encode("utf-8"))
# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())

3.5 sha512加密

import hashlib
hash = hashlib.sha512()
hash.update("mayi".encode("utf-8"))
# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492
daac2b9c03a89defe
print(hash.hexdigest())

3.6 “加盐”加密

  以上加密算法虽然很厉害,但仍然存在缺陷,通过撞库可以反解。所以必要对加密算法中添加自定义key(通过加入用户名或者随机字符等)再来做加密。

import hashlib
hash = hashlib.md5('python'.encode('utf-8'))
hash.update("mayi".encode("utf-8"))
# b0758ad1aad20530044668775f389922
print(hash.hexdigest())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载音频系统方案的组合设计

现代数学可以分为两大类:一类是研究连续对象的,如分析学、方程等,另一类就是研究离散对象的数学。 有人认为广义的组合数学就是离散数学,也有人认为离散数学是狭义的组合数学和图论、代数结构、数理逻辑等的总称。但这只是不同学者在叫法上的区别,随着计算机科学的日益发…

实现支付宝网站登录

不推荐使用沙箱环境&#xff0c;因为问题太多&#xff0c;如果使用沙箱环境请注意一下几点 alipay.user.info.auth&#xff08;用户登录授权接口&#xff09;的 return_url 必传&#xff0c;建议检查是否设置 return_url。return_url 与应用中的授权回调地址一致。再换沙箱环境…

图解最常用的 10 个机器学习算法

在机器学习领域&#xff0c;有种说法叫做“世上没有免费的午餐”&#xff0c;简而言之&#xff0c;它是指没有任何一种算法能在每个问题上都能有最好的效果&#xff0c;这个理论在监督学习方面体现得尤为重要。 举个例子来说&#xff0c;你不能说神经网络永远比决策树好&#…

5.4 单管放大电路的频率响应

一、单管共射放大电路的频率响应 考虑到耦合电容和结电容的影响&#xff0c;图5.4.1(a)所示电路的等效电路如图(b)所示。在分析放大电路的频率响应时&#xff0c;为了方便起见&#xff0c;一般将输入信号的频率范围分为中频、低频和高频三个频段。在中频段&#xff0c;极间电容…

Win10系统打开控制面板出现闪退怎么回事?

Win10系统打开控制面板出现闪退怎么回事&#xff1f;有用户开启自己电脑的控制面板时&#xff0c;突然间页面初选了闪退的情况&#xff0c;导致无法进行相关设置的操作。那么我们怎么去进行控制面板闪退问题的解决呢&#xff1f;一起来看看以下的解决方法吧。 解决方法 1、更换…

Python | 文件操作和异常处理

博主简介&#x1f647;&#xff1a;&#x1f393;本科大二学生&#x1f393;&#xff0c;立志成为一名全栈开发工程师&#x1f38f;&#x1f38f;分类专栏&#x1f4d8;&#xff1a;Python从入门到精通&#x1f33b;&#x1f33b; 知识目录一、文件操作1.1 打开和关闭文件1.2 读…

如何使用TCPA300电流放大器和电流探头进行电流测试

为了进行正确电流测试&#xff0c;工程师需要在使用前对电流探头进行消磁和校零调节&#xff0c;消磁可以消除电流探头的寄生磁场&#xff0c;否则会产生零点的漂移和测量误差&#xff0c;每次进行消磁后&#xff0c;都需要调节探头的零点&#xff0c;消除存在的偏移。电流探头…

垃圾桶溢出识别系统 opencv

垃圾桶溢出识别系统通过Opencvyolo网络模型深度学习技术&#xff0c;对垃圾桶垃圾溢出行为现象进行识别&#xff0c;监测到垃圾桶存在垃圾溢出时&#xff0c;立即抓拍存档 告警及时清理。OpenCV基于C实现&#xff0c;同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是…

JGroups介绍及入门实战

我们在开发集群系统的过程中&#xff0c;往往需要在多个进程间同步很多状态&#xff0c;比如每个服务器进程的负载状况、数据队列长度等等……。还有一些情况&#xff0c;我们需要把不同的进程分类&#xff0c;然后分发不同的通知消息&#xff0c;最常见的是发出一些运维命令&a…

「YGG Japan」宣布已完成约 295 万美元的新股权私募

ForN&#xff08;总部位于东京都港区&#xff1b;CEO 藤原哲哉&#xff1b;以下简称 “ForN” &#xff09;今天宣布&#xff0c;与 ForN 合作的区块链游戏平台 YGG Japan 已完成价值约 295 万美元的私募轮融资&#xff0c;投资方共有 18 家公司。加上本轮融资&#xff0c;YGG …

多种汉语方言语音落地应用,微软智能语音解锁更多交互场景

多年来&#xff0c;微软持续探索 AI 语音合成与识别技术&#xff0c;获得了大量成果&#xff1a;Azure Neural TTS&#xff08;text-to-speech&#xff0c;语音合成&#xff09;与 STT&#xff08;speech-to-text&#xff0c;语音识别&#xff09;支持的语言区域达到 140 余个&…

GItOps - k8s的微服务实战1 - 构建业务镜像

概述 在学习了容器化、docker和k8s的 Ingress-Nginx 、server 和pod 知识后&#xff0c;开启了 k8s的微服务实战第三篇&#xff0c;在搭建环境废了一点周折&#xff0c;这次实战的目的是集成在gitlab里&#xff0c;实现自动打包、发布的功能。 Mac M2芯 搭建k8s(minikube)超详…

puzzle(0332)色块拼图、物换星移、移星掠形

目录 一&#xff0c;纯色块拼图——旋转 二&#xff0c;物换星移 三&#xff0c;六边形纯色块拼图——旋转 四&#xff0c;纯色块拼图——轮换 五&#xff0c;移星掠形 练习模式 策略 比赛模式 一&#xff0c;纯色块拼图——旋转 这种纯粹就是数字拼图——旋转的简化版…

Web3中文|逆流前行:日本开始拥抱Web3

在最近的一次东京之行中&#xff0c;我发现交谈过的人似乎都没有因FTX崩溃&#xff08;或之前加密领域的一系列负面事件&#xff09;感到特别担忧。 众议院议员、日本现今执政党自民党的Web3项目团队成员Masaaki Taira表示&#xff0c;FTX的垮台“对政策制定没有影响”。 尽管…

DC/DC电源模块直流升压线性可调正负输出5v12v24v转0-±50v/±110v/±200v/±250v/±360v/±500v

特点● 效率高达70%以上● 1*2英寸标准封装● 正负电压输出● 价格低● 电压控制,输出电压随控制电压线性变化● 工作温度: -40℃~85℃● 阻燃封装&#xff0c;满足UL94-V0 要求● 温度特性好● 可直接焊在PCB 上应用GRA 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电…

CentOS 7 部署Nginx和前端框架

参考&#xff1a; Centos 7下安装配置Nginx-阿里云开发者社区 (aliyun.com) 阿里P8架构大牛整理的Nginx 从入门到实践&#xff0c;万字详解 安装nginx之后&#xff0c;处理 conf.d下无default.conf文件 1. CentOS 7 下安装配置 Nginx 一、配置 EPEL 源 sudo yum install -y e…

jquery方法学习及案例

JQ框架入手须知封装方法学习及应用插件&#xff08;白嫖超好用&#xff09;总结案例推荐网课链接入手须知 1.进官网点3.6版本 2.复制全部代码 3.建立文档名为jquery.min.js&#xff0c;粘贴代码 &#xff08;用的时候同cssjs引入&#xff09; 封装方法学习及应用 介绍联系…

Authing,助力先进制造 10 万亿产值之路

工信部表示&#xff0c;截止今年 9 月&#xff0c;一批有竞争力的先进制造业集群正在形成。重点培育的 25 个先进制造业集群&#xff0c;其主导产业产值近 10 万亿元&#xff0c;其中的 17 个集群产值同比增速超过两位数。 Authing 深耕芯片、机器人、航空航天、医药医械等先进…

多品类多SKU存储的四向穿梭车|海格里斯HEGERLS超高RGV四向穿梭车供应

近年来&#xff0c;随着电商、快递的快速发展&#xff0c;物流行业也迎来了智能化、数字化转型。伴随上下游产业链条的智能化升级&#xff0c;物流机器人产品开始被普及、应用。在仓储物流领域&#xff0c;AGV&#xff08;自动引导车&#xff09;、AMR&#xff08;自主移动机器…

2.编写第一个网页

第一个网页 ● 首先建立一个文件夹 ● 之后建立一个文件 ● 文件名称以.html结尾 ● 输入一个&#xff01;&#xff0c;回车&#xff0c;就会生成一个html框架 ● 其他的部分不用看&#xff0c;稍后会介绍&#xff0c;看这个标签&#xff0c;英文的意思就是标题&#xff…