首先先来介绍一下md5 和 sha1 的概念

MD5

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。128位长度。目前MD5是一种不可逆算法。

具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。

SHA1

SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长,

它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位。

因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。

python 中使用md5 和 sha1

python 的内置模块hashlib 中自带了 md5, sha1 所以在python 使用这两种加密还是非常方便的。

md5 使用例子:

 from hashlib import md5
data_str = "hello world"
hash_md5 = md5(data_str).hexdigest()
print hash_md5 结果为:5eb63bbbe01eeed093cb22bb8f5acdc3

sha1 使用例子:

 from hashlib import sha1
data_str = "hello world"
hash_sha1 = sha1(data_str).hexdigest()
print hash_sha1
结果为:2aae6c35c94fcfb415dbe95f408b9ce91ee846ed

可以看到的是,相同的字符串,加密后sha1的结果要比md5的结果在长度上要长一些。形同字符串,相同加密算法产生的加密串是相同的。

他们不仅可以用来加密字符串使用,往往还可以用来当做文件名,当做key value 格式存储的key,运行任务产生的instance id 等。

使用md5 + os.urandom(n) 产生随机字符串

有点时候我们会需要产生一个全局唯一的id,这个时候,md5 + os.urandom 就派上用场了。

os.urandom(n) 是一种随机生成n个字节字符串的方法,而且每次生成的值都不相同。再加上md5的处理,就能够成内容不同长度相同的字符串了。

例子:

import os
from hashlib import md5 for i in range(10):
print md5(os.urandom(24)).hexdigest() 输出结果: 3c0919ae5c84adc230a7adbb90446913
569c086e2f8badaf64065978ccb58482
3fa55d4a2a0de854bac9d33c730b7424
91b4a5029980a8166e305fe7d785b5d7
b251e79ec54c7f0320bb41320b8c6033
79c78471e6d87ba7dc11cb40618b2cf8
c14a40bb41e2ce4311d27b1add3af843
148340f61bd2193fa9fa1151f7ba7159
f3d2084ee4df18e6ad03a13ac6857f47
2f027d38265ec0576edb0c1d24eb6f68

python 中md5 和 sha1 加密, md5 + os.urandom 生成全局唯一ID的更多相关文章

  1. 如何在高并发分布式系统中生成全局唯一Id

    月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1.     ...

  2. 如何在高并发分布式系统中生成全局唯一Id(转)

    http://www.cnblogs.com/heyuquan/p/global-guid-identity-maxId.html 又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文, ...

  3. (转)如何在高并发分布式系统中生成全局唯一Id

    又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...

  4. 高并发分布式系统中生成全局唯一Id汇总

    数据在分片时,典型的是分库分表,就有一个全局ID生成的问题.单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求:   1 不能有单点故障.   2 以时间为序,或者ID里包含时间 ...

  5. hashlib —— Python 的 md5 和 sha1 加密

    python的md5和sha1加密 0. md5 与 sha1 MD5 的全称是 Message-Digest Algorithm 5(信息-摘要算法).128 位长度.目前 MD5 是一种不可逆算法 ...

  6. MD5、SHA1加密java 16位32位

    MD5.SHA1加密java 16位32位 import java.math.BigInteger; import java.security.MessageDigest; public class ...

  7. 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    高并发分布式系统中生成全局唯一(订单号)Id   1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...

  8. 高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]

    需求说明 在过去单机系统中,生成唯一ID比较简单,可以使用MySQL的自增主键或者Oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同 ...

  9. Linux系统中如何校验SHA1和MD5?

    来自:系统之家:http://www.xitongzhijia.net/xtjc/20160316/69125.html 我们在网络上下载或在U盘中复制的文件正常来说和源文件是一样的,但有时在下载或拷 ...

随机推荐

  1. Android基础:startActivityForResult 和 onActivityResult 问题

    项目中用到弹出Acitivity来获得用户输入 所以用到 onActivityResult()方法接受用户输入 奇怪问题 startActivityForResult() 后直接调用 onActivi ...

  2. js数组去重的方法

    //数组去重 Array.prototype.unique = function() { var newArr = [], hash = {}; for(var i=0, len=this.lengt ...

  3. 基于Flask的Web应用部署到SAE上遇到的问题

    我的应用底层数据库用的是MySQL,利用Flask-SQLALchemy实现接口操作.我遇到的问题是: 在我把代码部署到SAE上后,当数据向数据库insert的时候总是出现“2006,MySQL ha ...

  4. golang调用EXE

    我是win7+go1.7+liteide,调用calc.exe package main import ( "os/exec" ) func main() { datapath : ...

  5. powershell字符界面的,powershell加WPF界面的,2048游戏

    ------[序言]------ 1 2048游戏,有段时间很火,我在地铁上看有人玩过.没错,坐地铁很无聊,人家玩我就一直盯着看. 2 我在电脑上找了一个,试玩了以下,没几次格子就满了.我就气呼呼的放 ...

  6. webpack初学

    写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段 ...

  7. Ant介绍

    今天介绍一下Ant,Ant是基于Java的跨平台构建工具,它易于使用,并且可扩展.可升级.它既可以用于小的个人项目,也可以用于大型的.多组协同的软件项目. 在我们的项目开发中,为了构建一个软件产品,我 ...

  8. ucenter 新增用户后 自动登录discuz 不用激活

    uc_client models user.php function add_user($username, $password, $email, $uid = 0, $questionid = '' ...

  9. How to address this problem?

    root# cmake .. No problem. root# make [ 63%] Linking CXX shared module collisionperceptor.so/usr/bin ...

  10. 《java异常的一些总结》

    关于Java中异常的一些总结: 3 有些时候,程序在try块里打开了一些物理资源(例如数据库连接,网络连接. 4 和磁盘文件等),这些物理资源都必须显示回收. 5 6 注意:Java的垃圾回收机制不会 ...