当前位置: 56net亚洲必嬴 > 数据库 > 正文

Python3 加密(hashlib和hmac)模块的落到实处,python3

时间:2019-10-24 18:29来源:数据库
转自:http://www.maomao365.com/?p=4732 这几个主题素材大概导致数据值的变动。平常来讲,上述难题大概在你利用非二进制串数据类型(如char,varchar,text等数据类型)的情况下发生。 下一周

转自:http://www.maomao365.com/?p=4732

这几个主题素材大概导致数据值的变动。平常来讲,上述难题大概在你利用非二进制串数据类型(如char,varchar,text等数据类型)的情况下发生。

下一周未有何样太专项论题的事物,就流水账记一下。近日开端入手转型Asp.net MVC,即使曾经落伍时期几条街,可是还是赶赶追追。有生机勃勃部分太细的点记在自己的笔记里,就不记到此处了,每一回发今日头条都以首次编写,希望能充实记念。

Python3 加密(hashlib和hmac)模块的兑现,python3hashlib

以下代码以Python3.6.1为例

  1. hashlib : 不可逆加密
  2. hmac : 不可逆键值对艺术加密

hashlib模块简单介绍:

hashlib模块为区别的木棉花哈希/安全散列(Secure Hash Algorithm)和 新闻摘要算法(Message Digest Algorithm)达成了三个共用的、通用的接口,也得以说是一个合并的进口。因为hashlib模块不止是组成了md5和sha模块的功力,还提供了对越来越多中算法的函数完结,如:MD5,SHA1,SHA224,SHA256,SHA384和SHA512。

hashlib模块使用手续:

1)获取贰个哈希算法对应的哈希对象(比如名叫hash): 能够由此hashlib.new(哈希算法名称, 开端出入消息)函数,来收获那些哈希对象,如hashlib.new('MD5', 'Hello'),hashlib.new('SHA1', 'Hello')等;也足以经过hashlib.哈希算法名称()来获得那一个哈希对象,如hashlib.md5(), hashlib.sha1()等。

2)设置/追加输入音讯: 调用已获得哈希对象的update(输入音信)方法能够设置或扩大输入消息,数次调用该方法,等价于把每一遍传递的参数借助后张开作为二个参数垫底给update()方法。约等于说,多次调用是加上,并非覆盖。

3)获取输入音信对应的摘要: 调用已得到的哈希对象的digest()方法或hexdigest()方法就可以获取传递给update()方法的字符串参数的摘要音信。digest()方法再次回到的摘要音讯是多个二进制格式的字符串,在那之中大概包蕴非ASCII字符,包蕴NUL字节,该字符串长度能够由此哈希对象的digest_size属性获取;而hexdigest()方法重返的摘要音讯是一个16进制格式的字符串,该字符串中只包含16进制的数字,且长度是digest()重返结果长度的2倍,那可用邮件的平安交互或别的非二进制的景况中。

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/19'
# hash_demo.py Hash加密相关(安全哈希)
# 支持: MD5, SHA1 SHA224 SHA256 SHA384 SHA512


import hashlib


def hash_demo():
  m = hashlib.md5()
  m.update(b"hello")
  m.update(b"world!") # = hello + world!

  hash_hex = hashlib.sha3_512(b"luzhuo.me").hexdigest()

  print(m.digest_size)
  print(m.digest()) # 二进制hash
  print(m.hexdigest()) # 十六进制hash
  print(hash_hex)

  # 加盐加密
  hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)
  print(hash_bytes)



def hash_func():
  # hashlib.new(name[, data]) // 创建hashlib(非首选), name=算法名, data:数据
  hash = hashlib.new('ripemd160', b'luzhuo.me')

  # 常量
  dics = hashlib.algorithms_guaranteed # 所有平台支持的hash算法的名称
  dics = hashlib.algorithms_available # 在Python解析器中可用的hash算法的名称, 传递给new()时, 可识别

  # hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) // 加盐加密 hash_name:hash名称, password:数据, salt:盐, iterations:循环次数, dklen:密钥长度
  hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)

  # hash对象
  num = hash.digest_size # hash结果的大小
  num = hash.block_size # hash算法的内部块的大小
  strs = hash.name # hash名称, 可传给new()使用
  hash.update(b"data") # 字节缓冲区 hash.update(a) hash.update(b) == hash.update(a+b)
  hash_bytes = hash.digest() # 字节hash
  hash_str = hash.hexdigest() # 16进制字符串hash
  hash = hash.copy() # 拷贝hash对象副本



if __name__ == "__main__":
  hash_demo()

  # hash_func()

hashmac模块简要介绍:

前面说过,HMAC算法也是后生可畏种意气风发种单项加密算法,而且它是依靠上边各类哈希算法/散列算法的,只是它可以在运算进程中选用一个密钥来增加强安全性。hmac模块实现了HAMC算法,提供了相应的函数和艺术,且与hashlib提供的api基本黄金年代致。

hmac模块使用手续:

hmac模块模块的施用手续与hashlib模块的运用手续基本生机勃勃致,只是在第1步获取hmac对象时,只好动用hmac.new()函数,因为hmac模块未有提供与具象哈希算法对应的函数来赢得hmac对象。

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/19'
# hmac_demo.py HMAC算法
# 与hashlib不同之处在于多了key

import hmac


def hmac_demo():
  # 加密
  h = hmac.new(b"net")
  h.update(b"luzhuo.me")
  h_str = h.hexdigest()
  print(h_str)

  # 比较密码
  boolean = hmac.compare_digest(h_str, hmac.new(b"net", b"luzhuo.me").hexdigest())
  print(boolean)



def hmac_func():
  # 创建key和内容,再都进行加密
  # hmac.new(key, msg=None, digestmod=None) // 创建新的hmac对象, key:键, msg:update(msg), digestmod:hash名称(同hashlib.new())(默认md5)
  hc = hmac.new(b"key")

  # hmac对象
  hc.update(b"msg") # 字节缓冲区 hc.update(a) hc.update(b) == hc.update(a+b)
  hash_bytes = hc.digest() # 字节hash
  hash_str = hc.hexdigest() # 16进制hash字符串
  hc = hc.copy() # 拷贝hmac副本
  num = hc.digest_size # hash大小
  num = hc.block_size # hash算法内部块大小
  strs = hc.name # hash名称
  # hmac.compare_digest(a, b) // 比较两个hash密钥是否相同, 参数可为: str / bytes-like object, (注:建议使用,不建议使用a==b)
  boolean = hmac.compare_digest(hmac.new(b"net", b"luzhuo.me").digest(), hmac.new(b"net", b"luzhuo.me").digest())




if __name__ == "__main__":
  hmac_demo()

  # hmac_func()

如上正是本文的全部内容,希望对大家的求学抱有扶植,也指望我们多多点拨帮客之家。

加密(hashlib和hmac)模块的贯彻,python3hashlib 以下代码以Python3.6.1为例 hashlib : 不可逆加密 hmac : 不可逆键值对艺术加密 hashlib模块简单介绍:...

大器晚成、mssql sql hashbytes 函数简单介绍

  • AES_ENCRYPT()和AES_DECRYPT()

2019.02.19
先前都是在C#前后相继中平昔生成MD5,那二遍出于逻辑须要,要在SQL 间接生成MD5,学习了四个言辞:
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),3,32)
下一场开展了疏散得到以下文化:
1、--HashBytes ('加密方式', '待加密的值')--(有个疑问,为何他的归来类型是二进制,最后select出来的确实0x早先的16进制???)
--加密方法= MD2 | MD4 | MD5 | SHA | SHA1
--重回值类型:varbinary(maximum 8000 bytes)
select HashBytes('MD5','123456')
--HashBytes生成的结果为:0xE10ADC3949BA59ABBE56E057F20F883E

hashbytes函数作用为:再次来到三个字符,
通过 MD2、MD4、MD5、SHA、SHA1、SHA2_256、SHA2_512方式加密后的重回值

AES_ENCRYPT()和AES_DECSportageYPT()能够加密/解密使用官方AES算法的数码。该算法使用1贰二十一位密钥来编码,但客户能够将其扩充到258位。MySQL采纳1二十八人密钥,因为这么算法达成越来越快,况兼对绝大许多客户来说它也丰硕安全了。

里面,'待加密的值'要极度小心,赋的值相像,假诺类型分歧,获得的md5南辕北辙。举个例子:varchar,nvarchar,因为她俩的实际上存款和储蓄大小不等同。

hashbytes(‘参数1’,’参数2’)

AES_ENCRYPT(str,key_str)函数加密四个字符串并赶回四个二进制串。AES_DECRYPT(crypt_str, key_str) 函数能够解密使用官方AES(Advanced Encryption 斯坦dard)算法加密的数目并再次回到原有字符串,输入变量能够是轻松长度。若是输入变量为NULL,那么该函数重临结果也为NULL。

2、sys.fn_sqlvarbasetostr用于把字节流类型varbinary,转产生字符流varchar
3、substring('原始字符串','初步地方','截取长度')字符串截取。有几许内需专心的是,sql跟C#前后相继分化的是,早先地方是从1起初的,不是0,别算错了

参数1:
输入加密类型 例:MD5
参数2:
输入待加密的字符串(加密字符串最大值为 8000字节)
返回值:
重返值最大为8000字节
注意事项:
当输入加密类型,格外时,重返NULL

因为AES是多个块级算法,需求使用补白来编码非偶数长度的字符串。

2019.02.20
通过MVC的一个[ValidateAntiForgeryToken]特点学习到了“跨网址诉求虚构”(CSTiguanF(Cross-site request forgery))那么些定义,意思正是第三方站点利用漏洞站点对浏览器cookie的信任,发送虚假诉求,进而做出一些未经客户许可的操作,前提是顾客未脱离信赖站点的对话,何况信赖站点在本土发生了cookie。早先的确没怎么放在心上这么些细节,只是以往付出的WebAPI项目中根本未曾用到cookie,连session也没用,所以应当是平安的。

二、mssql sql hashbytes 比方应用

  • ENCODE()和DECODE()

2019.02.21
集结类型的二种选择思路:
1.借令你回到的成团是只用于遍历,不可改正的,则赶回IEnumerable<T>
2.若是回去的相会必要修正,如增添和删除成分,用ICollection<T>
3.举例回去的联谊须要补助排序,索引等,用IList<T>
4.假若回去的聚积要帮衬索引,但不可能充足,删除成分,用ReadOnlyCollection<T>

例1:

ENCODE(str, pass_str):该函数使用pass_str作为密码来加密字符串str,其加密的结果能够经过DECODE()函数来解密。该函数再次来到的结果是三个同str等长。 DECODE(crypt_str, pass_str):该函数使用pass_str作为密码来解密使用ENCODE()加密后的字符串crypt_str。

2019.02.22
1、泛型:Func<T, bool>,Expression<Func<T, bool>>用法
Func<T, bool>:.net系统自定义了二种委托,有重回值的Func,无重回值的Action。而Func的最后二个参数总是委托的归来类型。
Expression<Func<T, bool>>:是生龙活虎种表明式,EF中where供给的花色
例如:

编辑:数据库 本文来源:Python3 加密(hashlib和hmac)模块的落到实处,python3

关键词:

  • 上一篇:没有了
  • 下一篇:没有了