利用Python 生成hash值

一、介绍

如果在Python中需要对用户输入的密码或者其他内容进行加密,首选的方法是生成hash值。
在Python中可以利用二个模块来进行:
- crypt
- hashlib

二、crypt模块

(一)crypt的主要方法和常量

名称类型描述
crypt(…)方法对指定内容进行hash加密
methods(…)方法返回可以用到的加密算法
mksalt(…)方法根据加密算法生成salt
methods(…)方法返回可用加密算法的列表
METHOD_MD5常量md5加密算法
METHOD_SHA256常量sha256加密算法
METHOD_SHA512常量sha512加密算法

(二)使用说明与示例

使用crypt.crypt(…)进行hash加密的时候,需要提供二个参数:
- 加密内容
- salt

如果不特别指定salt,系统就会调用crypt.mksalt(…)生成一个salt

如果想要以特定的加密算法生成salt就应该使用下面的命令:

>>>salt = crypt.mksalt(crypt.METHOD_SHA512)
>>> salt
'$6$s8Q3eNP6urKZb3AK'

然后再进行数据加密:

>>> hash = crypt.crypt("helloworld",salt)
>>> hash
'$6$s8Q3eNP6urKZb3AK$L0O5cqHRU.1f170bV2KrjF3LkLL54So442TqUIsk.wYtCtOSD4Tyt./fj6W6Y.EzrbNm00grA4yPPhXGya2ie1'

三、hashlib模块

(一)hashlib的主要方法和常量

名称描述
md5(…)利用md5算法加密
sha1(…)利用sha1算法加密
sha224(…)利用sha224算法加密
sha256(…)利用sha256算法加密
sha384(…)利用sha384算法加密
sha512(…)利用sha512算法加密

**(二)Hash对象特有的方法

如果你利用hashlib生成了一个Hash对象,那么这个Hash对象会包含如下方法:

名称描述
update(arg)可以重复利用指定了特殊加密算法的Hash对象,对arg进行加密
digest(…)以字符形式返回加密内容
hexdigest(…)以16进制形式返回加密内容
copy(…)为了达到重复利用Hash对象的目的,而克隆Hash对象

(三)示例

1、直接使用hashlib方法

from hashlib import md5
from hashlib import sha1
from hashlib import sha224
from hashlib import sha384
from hashlib import sha512
import hashlib

def hashForString(method,srcbyte):
    srcbyte = srcbyte.encode('gb2312')
    testnew = hashlib.new(method,data=srcbyte).hexdigest()
    print(testnew)
    
    if method == 'md5':
        m = md5()
        #生成hash对象后,用update方法对字符串进行md5加密的更新处理
        m.update(srcbyte)
        srcbyte = m.hexdigest()
    elif method == 'sha1':
        s = sha1()
        s.update(srcbyte)
        srcbyte = s.hexdigest()
    elif method == 'sha224':
        s = sha224()
        s.update(srcbyte)
        srcbyte = s.hexdigest()
    elif method == 'sha384':
        s = sha384()
        s.update(srcbyte)
        srcbyte = s.hexdigest()
    elif method == 'sha1':
        s = sha512()
        s.update(srcbyte)
        srcbyte = s.hexdigest()
    return srcbyte
print(hashForString('md5','math'))

2、直接使用Hash对象中的方法

>>> m = hashlib.md5()
>>> m
<md5 HASH object @ 0x7f99432c5468>
>>> m.update("Nobody inspects")
>>> m.digest()
'>\xf7)\xcc\xf0\xccV\x07\x9c\xa5F\xd5\x80\x83\xdc\x12'
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
>>> m.hexdigest()
'bb649c83dd1ea5c9d9dec9a18df0ffe9'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值