python学习之路—自动生成唯一标识(md5加密方式)

前言

     在python存入数据库时,如果数据库的主键不是自增方式,那么我们可能需要自己生成一个唯一标识符,现在最好的方法就是md5加密生成的32位作为主键,本文将会介绍python的两种自动生成唯一标识的方式。

python MD5加密方法

     在介绍方式之前先了解一下python如何对数据进行md5加密

依赖包 :

import  hashlib

用法:

def md5(string):
    # 对要加密的字符串进行指定编码
    string = string.encode(encoding ='UTF-8')
    # md5加密
    print(hashlib.md5(string))
    # 将md5 加密结果转字符串显示
    string = hashlib.md5(string).hexdigest()

方法一:

依赖包:

import uuid

用法:

# 获取唯一加密值,uuid1 根据主机mac地址和时间戳生成全球唯一加密值唯一缺点会暴露mac地址
id = uuid.uuid1()
#将生成的加密值去除-获得32位加密值
id = id.replace('-','')

知识点

       uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现。有时也称guid(global unique identifier)。python中自带了uuid模块来进行uuid的生成和管理工作。

  python中的uuid模块基于信息如MAC地址、时间戳、命名空间、随机数、伪随机数来uuid。具体方法有如下几个:  

  uuid.uuid1()  基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性,缺点会暴露mac地址。

  uuid.uuid2()  算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。不过需要注意的是python中没有基于DCE的算法,所以python的uuid模块中没有uuid2这个方法。

  uuid.uuid3(namespace,name)  通过计算一个命名空间和名字的md5散列值来给出一个uuid

  uuid.uuid4()  通过伪随机数得到uuid,是有一定概率重复的

  uuid.uuid5(namespace,name)  和uuid3基本相同,只不过采用的散列算法是sha1

--------------------- 

参考文档:https://www.cnblogs.com/hellojesson/p/6410445.html 

                  https://www.cnblogs.com/franknihao/p/7307224.html

 

方法二:

依赖包: 

import hashlib
import os

用法:

//利用os随机生成26个字符 然后对其md5加密

id = hashlib.md5(os.urandom(26)).hexdigest()

知识点:

os.urandom(n)函数

函数定位: Return a string of n random bytes suitable for cryptographic use. 
意思就是,返回一个有n个byte那么长的一个string

在文档中,被归结于os这个库的Miscellaneous Functions,意思是不同种类的函数(也可以说是混种函数) 
原因是: This function returns random bytes from an OS-specific randomness source. (函数返回的随机字节是根据不同的操作系统特定的随机函数资源。即,这个函数是调用OS内部自带的随机函数的。有特异性)
--------------------- 
参考文档:https://blog.csdn.net/a19990412/article/details/80934268 
 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值