美文网首页
单向加密算法

单向加密算法

作者: 忘了呼吸的那只猫 | 来源:发表于2021-12-21 14:45 被阅读0次

    单向加密算法,又称哈希函数、散列函数、杂凑函数、摘要算法,英文名One-way encryption algorithm

    单向加密如其名只能加密不能解密(彩虹表攻击不能算是正经的解密方式),不能解密的原因是本质上并不是用IV(Initial Vector)去加密M输出M的密文,而是用M去加密IV输出IV的密文。

    用途:消息认证摘要、内容或文档的数字指纹、口令存储。

    单向加密又可以分为hashhmac两大类,hmachash的算法是一样的,其实可以认为hmac就是hash加盐的形式(不过这盐值不是hash中常用的拼接在最前边或拼接在最后边,具体怎么拼接的我不太确定)。

    一般来说标准库就挺好用时我们一般就直接用标准库,python的标准库就能容易地实现单向加密算法,所以单向加密我们使用标准库实现。

    pythonhash类算法使用hashlib库实现,hmac类算法使用hmac库实现。

    标准库支持的单向加密算法

    import hashlib # 注意输出结果中各算法使用大写和小写写了两遍 
    # 同时也是说到后边的书写中算法名大写或小写都是可以的
    hashlib.algorithms_available
    

    使用hashlib实现hash算法(以md5为例)
    import hashlib
    
    # 实例化方法一,直接使用算法名;这种形式不完全支持hashlib.algorithms_available中的算法
    # m = hashlib.md5()
    # 实例化方法二,使用new方法;所有支持的算法名看上边hashlib.algorithms_available
    m = hashlib.new("md5")
    # update内是要加密的内容
    # update使用+=,即连续多次update表示在原先内容上追加而不是替换
    m.update(b"123456")
    # 以十六进制字符串形式输出
    m.hexdigest()
    

    使用hmac实现hmac算法(以sha1为例)

    import hmac
    
    # 实例化原形是hmac.new(key, msg=None, digestmod=None)
    # key--加密用的盐值
    # msg--要加密码的内容,可为空而后用update方法设置
    # digestmod--加密算法,默认为md5,所有支持的算法名看上边hashlib.algorithms_available
    m = hmac.new(b"123",digestmod="sha1")
    # update使用+=,即连续多次update表示在原先内容上追加而不是替换
    # 但要注意所谓的+=是msg之间的+=,而不是key和msg之间的+=
    # 即使用以下update后等价于hmac.new(b"123",b"123456", digestmod="sha1"),而不是hmac.new(b"123123456", digestmod="sha1")
    m.update(b"123456")
    # 以十六进制字符串形式输出
    m.hexdigest()
    

    ps:除了标准库,python三方库pycryptodome提供了更加完备的加密方式,包括对称加密和非对称加密

    相关文章

      网友评论

          本文标题:单向加密算法

          本文链接:https://www.haomeiwen.com/subject/hccxqrtx.html