文章目录

  • 一、hashlib介绍
  • 二、使用hashlib库进行md5加密
    • 1、加密未混淆代码
    • 2、混淆加密代码
  • 三、使用hashlib库进行sha256、sha384、sha512加密
  • 四、多重加密(加盐加密)
  • 五、base64加密

最近在完成商城案例作业时,遇到提交注册密码时是一串数字和字母,觉得不安全,遂研究起来加密。

加密算法很多,索性学习了几个常用的(MD5、sha256、base64)。

一、hashlib介绍

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

在python3的hashlib标准库中可以调用SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。

二、使用hashlib库进行md5加密

1、加密未混淆代码

import hashlibdef jm_md5(password):m = hashlib.md5()  # 构建MD5对象m.update(password.encode(encoding='utf-8')) #设置编码格式 并将字符串添加到MD5对象中password_md5 = m.hexdigest()  # hexdigest()将加密字符串 生成十六进制数据字符串值return password, password_md5g = jm_md5('123456')
print(g)

结果 :(‘123456’, ‘e10adc3949ba59abbe56e057f20f883e’)

2、混淆加密代码

我们知道 update可以将值增加,到集合(字典)或者键值对中。
在MD5加密中,它能起到字符串拼接作用,也就是能达到混淆加密的作用。

import hashlib
def hxjm_md5(password,value):''':param password: 加密字符串:param value: 混淆字符串:return: 将混淆后的加密结果转成16进制字符串形式返回'''m = hashlib.md5(password.encode("utf-8"))m.update(value.encode('utf-8'))pwd_md5 = m.hexdigest()return password,value,pwd_md5j = hxjm_md5('123456','wuhan')
print(j)

结果:(‘123456’, ‘wuhan’, ‘8ebbaf4714f033d20a0fef5f25ed63de’)

常见的加密方式:字符串添加当前时间戳生成一个唯一的MD5值并返回

import time
import hashlibdef hxjm_md5(password):value = str(time.time()) # 获取当前时间戳,转化为字符串并赋值给valueprint("当前时间::" + time.strftime("%H:%M:%S", time.localtime(time.time())))m = hashlib.md5(password.encode('utf-8'))m.update(value.encode('utf-8'))pwd_md5 = m.hexdigest()return password,value,pwd_md5g = hxjm_md5('123456')
print(g)

结果:(‘123456’, ‘1581344237.6187823’, ‘4612dadda102056fcdbce06799b70940’)

1581344237.6187823 是时间戳,可以用time.localtime(time.time())函数进行转换。

三、使用hashlib库进行sha256、sha384、sha512加密

sha256和sha512在python中使用方法基本一样,只是返回的摘要算法不同,代码中只演示sha256。

def jm_sha256(key, value='wuhan'):''':param key: 明文密码:param value: 混淆字符串:return:混淆后的加密结果'''hsobj = hashlib.sha256(key.encode("utf-8"))hsobj.update(value.encode("utf-8"))return hsobj.hexdigest()print(jm_sha256('123456'))

结果:6fecd7d60a883872ab0b74656f9de08b3b7b396e0a52846069bf8610982e6990

四、多重加密(加盐加密)

一次MD5或者sha256很容易被人反编译或者通过穷举法给编译出来,这个时候就需要通过加盐加密、多重加密来保障密码安全。
加盐加密:就是在字符串中加入固定的或者随机的字符串,将拼接后的结果进行加密。
多重加密:就是对一个字符串进行多个算法混合加密,如:sha256(md5($pass))等

'''密码加密version:01author:jasnDate:2020-02-10
'''
import hashlib,random,string,timedef jm_sha256(key):''':param key: 加密字符串:return:返回混淆后加密密问'''# value 10位数的随机盐value = ''.join(random.sample(string.ascii_letters +str(time.time()),10))hsobj = hashlib.sha256(key.encode("utf-8"))hsobj.update(value.encode("utf-8"))return hsobj.hexdigest()def jm_md5(key, value='china'):''':param key: 加密字符串:param value: 固定的盐,用来混淆:return: 返回混淆后加密密问'''hsobj = hashlib.md5(key.encode("utf-8"))hsobj.update(value.encode("utf-8"))return hsobj.hexdigest()if __name__ == '__main__':g = jm_md5(jm_md5((jm_sha256('123456'))))print(g)

加盐多重混淆后的加密结果:200b86a5b31c12c2801d0109562048e4

五、base64加密

差一点忘记了,想对比其他几种加密方式,base64起不到加密的作用,但是为了学习还是写一写。

Base64编码之所以称为Base64,是因为其使用64个字符来对任意数据进行编码,同理有Base32、Base16编码。标准Base64编码使用的64个字符为:

Base64编码本质上是一种将二进制数据转成文本数据的方案。对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)计算其十进制值,根据该值在上面的索引表中找到对应的字符,最终得到一个文本字符串。

可知 Hello! 的Base64编码结果为== SGVsbG8h ==,原始字符串长度为6个字符,编码后长度为8个字符,每3个原始字符经Base64编码成4个字符,编码前后长度比4/3,这个长度比很重要 - 比原始字符串长度短,则需要使用更大的编码字符集,这并不我们想要的;长度比越大,则需要传输越多的字符,传输时间越长。Base64应用广泛的原因是在字符集大小与长度比之间取得一个较好的平衡,适用于各种场景。

上代码敲一下

import base64a = "this is a test"
bs64 = base64.b64encode(a.encode('utf-8')) # 对字符串编码
print(bs64)
'''
结果:
>>>: b'dGhpcyBpcyBhIHRlc3Q='
'''
debs64 = base64.b64decode(bs64)   # 对base64编码进行解码
print(debs64)'''
结果:
>>>: b'this is a test'
'''

用python实现MD5、sha256、sha384、sha512、base64加密相关推荐

  1. 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?

    转载:http://blog.csdn.net/stpeace/article/details/41922115 openssl的库的用法, 前面已经介绍了, 所以不再啰嗦, 直接给出代码: [cpp ...

  2. 利用openssl来计算sha1, sha224, sha256, sha384, sha512

    转载:http://blog.csdn.net/stpeace/article/details/42371079 利用openssl来计算sha1, sha224, sha256, sha384, s ...

  3. 【密码算法 之八】Hash类算法(单向散列函数) MD5 \ SHA1 \ SHA224 \ SHA256 \ SHA384 \ SHA512等浅析

    1. 综述   Hash算法,又称单向散列函数(one-way hash function).   单向散列函数有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash va ...

  4. Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结

    (1)commons-codec包简介 包含一些通用的编码解码算法.包括一些语音编码器,Hex,Base64.MD5 一.md5.base64.commons-codec包 commons-codec ...

  5. python3 hashlib加密库 md5 sha1 sha256 sha384 sha512 加盐

    简介: 用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法. 在python3中已经废弃了md5和sha模块,简单说 ...

  6. C++计算md5/sha1/sha256/sha384/sha512算法

    最近需要分析文件的特征唯一值需求,这几个哈希算法就非常有用了.特别记录一下! 算法需要openssl库的支持,如果你勤快也能把库里面依赖的代码抠出来.我就懒得的弄了.直接编译openssl库 下载op ...

  7. 哈希算法SHA1,SHA256,SHA384,SHA512

    HASH算法,sha系列的基本写完 sha1 ,见我之前的一篇博客 http://andydhu.blog.51cto.com/3337368/824735 sha256 #include<st ...

  8. python hashlib库 sha256算法 md5

    python内建函数hash()针对不可变对象提供计算哈希值,但我觉得没啥用,可能这个函数的唯一作用就是python字典用了这个函数实现哈希. python内建库hashlib库提供了很多哈希算法. ...

  9. python实现md5和sha1加密

    python的内置库hashlib主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 md5加密 import hashlibdata = 'test' ...

  10. python md5加密解密_Python使用MD5加密算法对字符串进行加密操作示例

    本文实例讲述了Python使用MD5加密算法对字符串进行加密操作.分享给大家供大家参考,具体如下: # encoding: utf-8 from __future__ import division ...

最新文章

  1. mysql的查询语句怎么优化_MySQL查询语句如何优化
  2. 简单了解各种序列化技术-Hessian序列化框架
  3. 部署项目的问题(二)—— 阿里云服务器 ECS升级node版本
  4. 使用HazelCast进行休眠缓存:基本配置
  5. Python之subprocess模块
  6. python老师 课时费_花10分钟写一个Python脚本,搞定了初中老师一下午的工作
  7. LVS负载均衡的几种模式和算法
  8. openstack-o版-启动实例
  9. 微信朋友圈的测试用例
  10. 非接触IC卡读写模块MFRC530的工作原理及其应用
  11. IDEA编译错误PersistentEnumerator storage corrupted
  12. 外网访问 虚拟机下的web服务器 设置主机端口与虚拟机ip和端口的映射
  13. linux文本三剑客演讲稿,Linux文本三剑客总结
  14. python简单的人脸识别系统(PCA+逻辑回归)
  15. 按照姓名拼音首字母排序
  16. 四川小学计算机的组成是几年级学,小学三年级计算机教案
  17. 随机生成英文字母 php,PHP生成随机英文用户名
  18. 如何用html制作一个动态烟花,视频加烟花特效 视频如何制作烟花效果|视频上添加动态的焰火效果...
  19. 【模拟】【NOIP2008】笨小猴 word
  20. Samba服务器搭建,win10拒绝访问解决方法

热门文章

  1. 互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
  2. 前端页面文字出现繁体字,乱码解决方案
  3. AJAX(三)--实例无刷新验证用户名是否存在
  4. MultiWii平台Arduino无人机
  5. Vue(动画、过渡、动画库)
  6. JFrame与Frame的区别
  7. 画论82 李修易《小蓬莱阁画鉴》
  8. 记录好用的电脑工具/软件
  9. python程序实现:linux环境下,将一个文件夹内的所有.tar.gz压缩文件解压缩到同名子文件夹内,没有子文件夹时重新建立同名子文件夹,使得它们相互独立。
  10. SAP中加工商分包库存参与MRP运算吗?