kavin

Python模块学习之hashlib hash加密

kavin Python 2018-05-15 2144浏览 0

Python中的hashlibhmac模块用来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中可以使用以下代码来实现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加密算法代码:

/// &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();
    }
}


继续浏览有关 Python模块hashlib hash加密 的文章
发表评论