博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3模块-random、hashlib和base64
阅读量:5043 次
发布时间:2019-06-12

本文共 3532 字,大约阅读时间需要 11 分钟。

random模块

random.random()用于生成一个浮点数x,范围为0 =< x < 1  

import random>>>print(random.random())1.864001829819306

random.uniform(a,b)用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。

import random>>>print(random.uniform(1,10))7.559074479037658#其上限与下限参数位置可以改变,但生成的数值还是在范围之内>>>print(random.uniform(10,1))5.487835445265534

random.randint(a,b),用于生成一个范围内的整数,其中a必须大于等于b。

*print(random.randint(1,5))3print(random.randint(5,1)#引发一个ValueError

random.randrange([start],stop[,step])从一个集合中随机取出一个数字

import random>>>print(random.randrange(1,100))22>>>print(random.randrange(1,100,2))  #偶数集合在这里等效于random.choice(range(1,100,2))16

random.choice(seq), seq是一个非空序列,如list、tuple、字符串等。如果为空,引发IndexError

import random>>>print(random.choice('abcdefg'))c>>>print(random.choice('tom','jerry','lisa'))tom>>>print(random.choice(('a','b','c')))c

random.shuffle(x[,random]),将一个list打乱重新组合,list还是原list,没有占用空间。

import random>>>alist = [1,2,3,4,5]>>>random.shuffle(alist)>>>print(alist)[2, 5, 4, 3, 1]

random.sample(seq,k),从指定序列中随机获取指定长度的片段

import randoma = [1,2,3,4,5]>>>print(random,sample(a,3))[3,1,5]

random更多方法参见官方docs:

 

hashlib模块

 这个模块实现了一个通用的接口来实现多个不同的安全哈希和消息摘要算法。包括FIPS安全散列算法SHA1,SHA224,SHA256,SHA384和SHA512(在FIPS 180-2中定义)以及RSA的MD5算法

因为哈希在字节上工作,而不是字符,所以要使哈希工作在字符上,需要encode编码为utf-8,再以十六进制形式进行摘要计算

import hashlibstr = 'mzc19971103'md5 = hashlib.md5()md5.update(str[0:5].encode('utf-8'))md5.update(str[5:].encode('utf-8'))print(md5.hexdigest())sha1 = hashlib.sha1()sha1.update('mzc19971103'.encode('utf-8'))print(sha1.hexdigest())

处理字符串时还可以加盐,只要加盐字符串不被泄露,无法根据md5解析出字符串

import hashlibdef calc_md5(password):    md5 = hashlib.md5()    md5.update(password.encode('utf-8'))    a = md5.hexdigest()    return adb = {}def writeindb(username, password):    db[username] = calc_md5(password+'woaini1997')  #加盐    print(db)def login(username, password):    p = calc_md5(password+'woaini1997')    if username in db and db[username] == p:        print('login succ')    else:        print('username or passwd error')def register():    username = input('input ur username:')    password = input('input ur password:')    if username in db:        print('account exit!')    else:        writeindb(username, password)def logininput():    username = input('plz input ur account:')    password = input('plz input ur password:')    if username != "" and password != "":        login(username, password)    else:        print('uname or passwd not empty!')if __name__ == '__main__':    while True:        # username = input('plz input ur username:\n')        # password = input('plz input ur password:\n')        selec =input('register select:1  login select:2   quit plz select:3\n')        if selec == '1':            register()        elif selec == '2':            logininput()        elif selec == '3':            break

 hashlib更多用法参见:

 

 

 

base64

此模块提供将二进制数据编码为可打印ASCII字符并将此类编码解码回二进制数据的功能。它为在 中指定的编码提供编码和解码功能,该编码定义了Base16,Base32和Base64算法,以及事实上的标准Ascii85和Base85编码.

base64可以直接编码

import base64def safe_base64_encode(a): #base64编码函数    s = base64.b64encode(a)    print(s)safe_base64_encode(b'legend') #打印结果:b'bGVnZW5k'

解码:

import base64def safe_base64_decode(a):    s = base64.b64decode(a)print(a)safe_base64_decode(b'bGVnZW5k')#打印结果:b'legend'

base64.b64encode()和base64.b64decode()参数必须是类字节对象

 

由于标准的Base64编码后可能出现字符+/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+/分别变成-_

>>> base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')b'abcd++//'>>> base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')b'abcd--__'>>> base64.urlsafe_b64decode('abcd--__')b'i\xb7\x1d\xfb\xef\xff'

转载于:https://www.cnblogs.com/mzc1997/p/7756829.html

你可能感兴趣的文章
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>
图解算法时间复杂度
查看>>
UI_搭建MVC
查看>>
一个样例看清楚JQuery子元素选择器children()和find()的差别
查看>>
代码实现导航栏分割线
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
VS 2010打开设计器出现错误
查看>>
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
dvwa网络渗透测试环境的搭建
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
过点(2,4)作一直线在第一象限与两轴围成三角形,问三角形面积的最小值?...
查看>>
java aes CBC的填充方式发现
查看>>
使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法
查看>>
BZOJ 2338 HNOI2011 数矩形 计算几何
查看>>