python hashlib加密解密_Python模块学习:hashlib hash加密

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

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

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

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

Pythonimport 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

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

Pythonprint '-' * 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加密算法,其实也不是很难:

Python///   /// 按指定加密算法,对字符串进行加密  ///   /// 加密算法名称  /// 要加密数据  /// 加密后的数据  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加密算法代码:

Python/// 

  /// HashEncryptor类:提供各种hash加密算法的实现  ///   ///   /// //使用MD5加密  /// string data = "JGood";  /// string encryptedData = HashEncryptor.MD5(data);  ///   ///   /// HashEncryptor提供的加密算法都是不可逆的。  ///   public sealed class HashEncryptor  {

/// 

/// 私有构造函数,该类不能被实例化

/// 

private HashEncryptor()

{

}

/// 

/// 使用MD5加密算法加密字符串

/// 

/// 要加密的字符串

/// 加密后的字符串

public static string MD5(string data)

{

return Encrypt("MD5", data);

}

/// 

/// 使用SHA1加密算法加密字符串

/// 

/// 要加密的字符串

/// 加密后的字符串

public static string SHA1(string data)

{

return Encrypt("SHA1", data);

}

/// 

/// 使用SHA 256位加密算法加密字符串

/// 

/// 要加密的字符串

/// 加密后的字符串

public static string SHA256(string data)

{

return Encrypt("SHA256", data);

}

/// 

/// 使用SHA 384位加密算法加密字符串

/// 

/// 要加密的字符串

/// 加密后的字符串

public static string SHA384(string data)

{

return Encrypt("SHA384", data);

}

/// 

/// 使用SHA 512位加密算法加密字符串

/// 

/// 要加密的字符串

/// 加密后的字符串

public static string SHA512(string data)

{

return Encrypt("SHA512", data);

}

/// 

/// 按指定加密算法,对字符串进行加密

/// 

/// 加密算法名称

/// 要加密数据

/// 加密后的数据

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();

}  }

本文来自投稿,不代表访得立场,如若转载,请注明出处:http://www.found5.com//view/358.html

你可能感兴趣的:(python,hashlib加密解密)