Python模块学习:hashlib hash加密
admin
2023-07-30 22:12:35
0

不积跬步,无以至千里;不积小流,何以成江海.

每天学习一个Python模块,一个月可以了解30个模块,一年可以… …

今天看了一个Python中的hashlib及hmac模块,这两个模块用来hash加密。说到加密,首先要了解加密的基本知识:hash加密,对称加密,不对称加密,数字签名等等。相关的知识可以在msdn上查阅:http://msdn.microsoft.com/zh-cn/library/92f9ye3s.aspx

使用Python中的hashlib来进行hash加密是非学简单的,下面是一段简单代码:

1234567 import hashlibmd5 = hashlib.md5() #创建一个MD5加密对象md5.update(\”JGood is a handsome boy\”)  #更新要加密的数据print md5.digest()  #加密后的结果(二进制)print md5.hexdigest() #加密后的结果,用十六进制字符串表示。print \’block_size:\’, md5.block_sizeprint \’digest_size:\’, md5.digest_size

非常的简单,其实如果说加密一个字符串,根本不用写上面这么多代码,一条语句就可以了:

12 print \’-\’ * 25, \’更简洁的语法\’, \’-\’ * 25print hashlib.new(\”md5\”, \”JGood is a handsome boy\”).hexdigest()

hashlib模块还支持其他的hash加密算法,如:sha1, SHA224等等,要了解更多的知识,查一下Python手册。

Python hash VS .NEt hash

我出身是一个.NET程序员,以前也写过一些.NET下的hash加密类,在.NET中可以使用以下代码来实现MD5加密算法,其实也不是很难:

1234567891011121314151617181920 /// <summary>/// 按指定加密算法,对字符串进行加密/// </summary>/// <param name=\”hashName\”>加密算法名称</param>/// <param name=\”data\”>要加密数据</param>/// <returns>加密后的数据</returns>private static string Encrypt(string hashName, string data){    byte[] btData = System.Text.Encoding.ASCII.GetBytes(data);    //创建一个 HashAlgorithm派生类的实例    HashAlgorithm hasher = HashAlgorithm.Create(hashName);    //使用hash加密    byte[] hashedData = hasher.ComputeHash(btData);    StringBuilder result = new StringBuilder();    foreach (byte b in hashedData)    {        result.Append(b.ToString(\”x2\”));    //转换成16进制字符串保存    }    return result.ToString();}

附上用.NET编写的常用hash加密算法代码:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 /// &lt;summary&gt;/// HashEncryptor类:提供各种hash加密算法的实现/// &lt;/summary&gt;/// &lt;example&gt;/// //使用MD5加密/// string data = \”JGood\”;/// string encryptedData = HashEncryptor.MD5(data);/// &lt;/example&gt;/// &lt;remarks&gt;/// HashEncryptor提供的加密算法都是不可逆的。/// &lt;/remarks&gt;public sealed class HashEncryptor{    /// &lt;summary&gt;    /// 私有构造函数,该类不能被实例化    /// &lt;/summary&gt;    private HashEncryptor()    {    }    /// &lt;summary&gt;    /// 使用MD5加密算法加密字符串    /// &lt;/summary&gt;    /// &lt;param name=\”data\”&gt;要加密的字符串&lt;/param&gt;    /// &lt;returns&gt;加密后的字符串&lt;/returns&gt;    public static string MD5(string data)    {        return Encrypt(\”MD5\”, data);    }    /// &lt;summary&gt;    /// 使用SHA1加密算法加密字符串    /// &lt;/summary&gt;    /// &lt;param name=\”data\”&gt;要加密的字符串&lt;/param&gt;    /// &lt;returns&gt;加密后的字符串&lt;/returns&gt;    public static string SHA1(string data)    {        return Encrypt(\”SHA1\”, data);    }    /// &lt;summary&gt;    /// 使用SHA 256位加密算法加密字符串    /// &lt;/summary&gt;    /// &lt;param name=\”data\”&gt;要加密的字符串&lt;/param&gt;    /// &lt;returns&gt;加密后的字符串&lt;/returns&gt;    public static string SHA256(string data)    {        return Encrypt(\”SHA256\”, data);    }    /// &lt;summary&gt;    /// 使用SHA 384位加密算法加密字符串    /// &lt;/summary&gt;    /// &lt;param name=\”data\”&gt;要加密的字符串&lt;/param&gt;    /// &lt;returns&gt;加密后的字符串&lt;/returns&gt;    public static string SHA384(string data)    {        return Encrypt(\”SHA384\”, data);    }    /// &lt;summary&gt;    /// 使用SHA 512位加密算法加密字符串    /// &lt;/summary&gt;    /// &lt;param name=\”data\”&gt;要加密的字符串&lt;/param&gt;    /// &lt;returns&gt;加密后的字符串&lt;/returns&gt;    public static string SHA512(string data)    {        return Encrypt(\”SHA512\”, data);    }    /// &lt;summary&gt;    /// 按指定加密算法,对字符串进行加密    /// &lt;/summary&gt;    /// &lt;param name=\”hashName\”&gt;加密算法名称&lt;/param&gt;    /// &lt;param name=\”data\”&gt;要加密数据&lt;/param&gt;    /// &lt;returns&gt;加密后的数据&lt;/returns&gt;    private static string Encrypt(string hashName, string data)    {        byte[] btData = System.Text.Encoding.ASCII.GetBytes(data);        //创建一个 HashAlgorithm派生类的实例        HashAlgorithm hasher = HashAlgorithm.Create(hashName);        //使用hash加密        byte[] hashedData = hasher.ComputeHash(btData);        StringBuilder result = new StringBuilder();        foreach (byte b in hashedData)        {            result.Append(b.ToString(\”x2\”));    //转换成16进制保存        }        return result.ToString();    }}


相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...