zoukankan      html  css  js  c++  java
  • Python常用模块-常见的加密算法模块使用

               Python常用模块-常见的加密算法模块使用

                                          作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.MD5算法参数详解(不安全,已被破解)

    1.十六进制md5算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.md5()
     8 m.update(b"hello")                              #字节格式输入
     9 print(m.hexdigest())                             #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
    10 m.update(b"my name is yinzhengjie")
    11 print(m.hexdigest())
    12 
    13 
    14 m2 = hashlib.md5()
    15 m2.update(b"hello  my name is yinzhengjie") #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    16 print(m2.hexdigest())
    17 
    18 '''
    19 扩展:
    20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
    21 '''
    22 
    23 
    24 
    25 #以上代码执行结果如下:
    26 5d41402abc4b2a76b9719d911017c592
    27 1c7bdaafeb36ea7e3236d01afeee39cf
    28 1d19d8f2d5037b0f3e9a2d020930ba91

    2.二进制md5算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.md5()
     8 m.update(b"hello")                         #字节格式输入
     9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
    10 m.update(b"my name is yinzhengjie")
    11 print(m.digest())
    12 
    13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    14 m2 = hashlib.md5()
    15 m2.update(b"hello  my name is yinzhengjie")
    16 print(m2.digest())
    17 
    18 '''
    19 扩展:
    20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
    21 '''
    22 
    23 
    24 
    25 #以上代码执行结果如下:
    26 b']A@*xbcK*vxb9qx9dx91x10x17xc5x92'
    27 b'x1c{xdaxafxeb6xea~26xd0x1axfexee9xcf'
    28 b'x1dx19xd8xf2xd5x03{x0f>x9a-x02	0xbax91'

    二.sha1算法参数详解(不安全,已被破解)

      Google已经将改算法破解了,只是还没有公布,目前很少人用这种算法了!我国王晓云教授也声称破解了该加密方式,除此之外她还破解了md5哟。

    1.二进制sha1算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.sha1()
     8 m.update(b"hello")                         #字节格式输入
     9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
    10 m.update(b"my name is yinzhengjie")
    11 print(m.digest())
    12 
    13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    14 m2 = hashlib.md5()
    15 m2.update(b"hello  my name is yinzhengjie")
    16 print(m2.digest())
    17 
    18 '''
    19 扩展:
    20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
    21 '''
    22 
    23 
    24 
    25 #以上代码执行结果如下:
    26 b'xaaxf4xc6x1dxdcxc5xe8xa2xdaxbexdex0f;H,xd9xaexa9CM'
    27 b'pxffxe5<x08xb9D?xabJxcdC2fx84xa07xd6xc2c'
    28 b'x1dx19xd8xf2xd5x03{x0f>x9a-x02	0xbax91'

    2.十六进制sha1算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.sha1()
     8 m.update(b"hello") #字节格式输入
     9 print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
    10 m.update(b"my name is yinzhengjie")
    11 print(m.hexdigest())
    12 
    13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    14 m2 = hashlib.sha1()
    15 m2.update(b"hello  my name is yinzhengjie")
    16 print(m2.hexdigest())
    17 
    18 '''
    19 扩展:
    20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
    21 '''
    22 
    23 
    24 #以上代码执行结果如下:
    25 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
    26 70ffe53c08b9443fab4acd43326684a037d6c263
    27 ad068b91291c2099822a36445eb24441125f33a6

    三.sha256算法参数详解

      这个是没有被破解的,连谷歌破解的仅仅是sha1,而256加密后的明显字节变长了呀,有木有。

    1.二进制sha512算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.sha256()
     8 m.update(b"hello")                         #字节格式输入
     9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
    10 m.update(b"my name is yinzhengjie")
    11 print(m.digest())
    12 
    13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    14 m2 = hashlib.md5()
    15 m2.update(b"hello  my name is yinzhengjie")
    16 print(m2.digest())
    17 
    18 '''
    19 扩展:
    20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
    21 '''
    22 
    23 
    24 
    25 #以上代码执行结果如下:
    26 b',xf2Mxba_xb0xa3x0e&xe8;*xc5xb9xe2x9ex1bx16x1e\x1fxa7B^sx043bx93x8bx98$'
    27 b'xecxf6x8ex01x17xac!:xb9<xe4xabxeex13x03xccxe4rxb0xdcxfbxcbmxd4xecxa2xc9Px02xfdixb7'
    28 b'x1dx19xd8xf2xd5x03{x0f>x9a-x02	0xbax91'

    2.十六进制sha512算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.sha256()
     8 m.update(b"hello") #字节格式输入
     9 print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
    10 m.update(b"my name is yinzhengjie")
    11 print(m.hexdigest())
    12 
    13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    14 m2 = hashlib.sha256()
    15 m2.update(b"hello  my name is yinzhengjie")
    16 print(m2.hexdigest())
    17 
    18 
    19 #以上代码执行结果如下:
    20 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
    21 ecf68e0117ac213ab93ce4abee1303cce472b0dcfbcb6dd4eca2c95002fd69b7
    22 f49de76fe30141f238d0c16234a0bf0188bf9a34b4e8ddb65c508c26d5b1af06

    四.sha512算法参数详解

      这个也没有被破解,明显的效果就是加密后的值变的比256还要长呢!

    1.二进制sha512算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.sha512()
     8 m.update(b"hello")                         #字节格式输入
     9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
    10 m.update(b"my name is yinzhengjie")
    11 print(m.digest())
    12 
    13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    14 m2 = hashlib.md5()
    15 m2.update(b"hello  my name is yinzhengjie")
    16 print(m2.digest())
    17 
    18 '''
    19 扩展:
    20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
    21 '''
    22 
    23 
    24 
    25 #以上代码执行结果如下:
    26 b'x9bqxd2$xbdbxf3x]x96xd4jxd3xea=s1x9bxfbxc2x89x0cxaaxdaxe2xdfxf7%x19g<xa7##xc3xd9x9bxa5xc1x1d|zxccnx14xb8xc5xdax0cFcG\.\:xdexf4osxbcxdexc0C'
    27 b"7x8fbxe6'x11xccxa8Ix9bx89=xcfxacx06xdcxbcxb7GyGx96xd9=xfcxa7rxc6xbax9epx96xd7Xx05x82xbdx87xaex94x90UDxddxdfx94-xa5xcdxf9ox89xdcxcfx85prx9ekvEx12xccx0f"
    28 b'x1dx19xd8xf2xd5x03{x0f>x9a-x02	0xbax91'

    2.十六进制sha512算法摘要

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hashlib
     7 m = hashlib.sha512()
     8 m.update(b"hello") #字节格式输入
     9 print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
    10 m.update(b"my name is yinzhengjie")
    11 print(m.hexdigest())
    12 
    13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
    14 m2 = hashlib.sha512()
    15 m2.update(b"hello  my name is yinzhengjie")
    16 print(m2.hexdigest())
    17 
    18 
    19 #以上代码执行结果如下:
    20 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
    21 378f62e62711cca8499b893dcfac06dcbcb747794796d93dfca772c6ba9e7096d7580582bd87ae94905544dddf942da5cdf96f89dccf8570729e6b764512cc0f
    22 ea1bdace33723e839894d77f70ad7d8477b36fd2f45a4d42b6b9637c745da5f75d2ab276f130a82619ebc7e53b9d30926f9ba89176c503d4825ab33bea5b0168

    五.hmac模块

      如果你觉得以上的加密方法还是不够安全~厉害了,你的安全感可真低啊,看来是伤的不轻,一定是一个有故事的人,不过针对你这种人呢~还有一种算法为你特别定制hmac,等你成为了一个开发大神,你可以自己写一个算法,因为你毕竟只相信你自己嘛,哈哈~

      散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性以及发送者的合法性了。(它内部对我们创建 key 和 内容 再进行处理然后再加密)

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
     5 #EMAIL:y1053419035@qq.com
     6 import hmac
     7 h = hmac.new("我本有心向明月".encode("utf-8"), "奈何明月照沟渠".encode("utf-8"),) #"我本有心向明月"这就好比双方(A,B)已经约定好了的key,(类似于我们第一次登录linux服务器,使用ssh登陆方式都会提示你,让你输入"yes"后才能输入密码。),接受者(A)接收到了"奈何明月照沟渠"这个明文消息和加密后的字符“489f9932949514ab24894559150088c0”,然后用定义好的key和去加密"奈何明月照沟渠"这个明文字符,如果加密后生成的字符是“489f9932949514ab24894559150088c0”就证明这个消息是发送者(B)发送过来的数据,它只能验证消息的合法来源。如果中间人截获了明文消息加以修改的,就会被发现!
     8 print(h.hexdigest())
     9 
    10 
    11 #以上代码执行结果如下:
    12 489f9932949514ab24894559150088c0
  • 相关阅读:
    Spring学习(21)--- AOP之Advice应用(上)
    Spring学习(20)--- Schema-based AOP(基于配置的AOP实现) -- 配置切入点pointcut
    Spring学习(19)--- Schema-based AOP(基于配置的AOP实现) --- 配置切面aspect
    Spring学习(18)--- AOP基本概念及特点
    Spring学习(17)--- 三种装配Bean方式比较
    Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)
    Spring学习(15)--- 基于Java类的配置Bean 之 @Bean & @Scope 注解
    怎么找到与你Eclipse匹配的spring tool suite插件
    eclipse安装hibernate插件(在线Marketplace中安装)
    从配置maven环境到maven项目的新建
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/8512015.html
Copyright © 2011-2022 走看看