不积跬步,无以至千里;不积小流,何以成江海.
每天学习一个Python模块,一个月可以了解30个模块,一年可以... ...
今天看了一个Python中的hashlib及hmac模块,这两个模块用来hash加密。说到加密,首先要了解加密的基本知识:hash加密,对称加密,不对称加密,数字签名等等。相关的知识可以在msdn上查阅:http://msdn.microsoft.com/zh-cn/library/92f9ye3s.aspx
使用Python中的hashlib来进行hash加密是非学简单的,下面是一段简单代码:
- import hashlib
- md5 = hashlib.md5() #创建一个MD5加密对象
- md5.update("JGood is a handsome boy") #更新要加密的数据
- print md5.digest() #加密后的结果(二进制)
- print md5.hexdigest() #加密后的结果,用十六进制字符串表示。
- print 'block_size:', md5.block_size
- print 'digest_size:', md5.digest_size
非常的简单,其实如果说加密一个字符串,根本不用写上面这么多代码,一条语句就可以了:
- print '-' * 25, '更简洁的语法', '-' * 25
- print hashlib.new("md5", "JGood is a handsome boy").hexdigest()
hashlib模块还支持其他的hash加密算法,如:sha1, SHA224等等,要了解更多的知识,查一下Python手册。
Python hash VS .NEt hash
我出身是一个.NET程序员,以前也写过一些.NET下的hash加密类,在.NET中可以使用以下代码来实现MD5加密算法,其实也不是很难:
- /// <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加密算法代码:
From:http://blog.csdn.net/jgood/article/details/4276398