zoukankan      html  css  js  c++  java
  • python3利用cryptography 进行加密和解密

    我们的日常工作中,一定会遇到需要加密的数据,比如:密码、私密信息... ...

    我们不仅要对他们进行加密,更需要对他们进行解密,因为毕竟我们的用户应该不会看得懂加密过后的字符串吧!!!

    在python强大的第三方插件库中,就有这么一个插件,很好的解决了我们的问题,这个插件的名为:cryptography

    cryptography: 的目标是成为“人类易于使用的密码学包cryptography for humans”,就像 requests 是“人类易于使用的 HTTP 库HTTP for Humans”一样。这个想法使你能够创建简单安全、易于使用的加密方案。

    cryptography安装。

    如果你使用的 Python 版本是 3.5及以上, 你可以使用 pip 安装,如下:

      pip install cryptography

    cryptography加密。

    我们使用 Fernet 对称加密算法,它保证了你加密的任何信息在不知道密码的情况下不能被篡改或读取。Fernet 还通过 MultiFernet 支持密钥轮换。

    下面让我们看一个简单的例子:

    from cryptography.fernet import Fernet
    #生成秘钥cipher_key
    cipher_key = Fernet.generate_key()
    print(cipher_key)
    cipher = Fernet(cipher_key)
    text = b'My name is PanChao.'
    #进行加密
    encrypted_text = cipher.encrypt(text)
    print(encrypted_text)
    #进行解密
    decrypted_text = cipher.decrypt(encrypted_text)
    print(decrypted_text)

    我们可以看到运行上面代码结果为:

      

    首先我们需要导入 Fernet,然后生成一个密钥。我们输出密钥看看它是什么样儿。如你所见,它是一个随机的字节串。如果你愿意的话,可以试着多运行 generate_key 方法几次,生成的密钥会是不同的。然后我们使用这个密钥生成 Fernet 密码实例。

    现在我们有了用来加密和解密消息的密码。下一步是创建一个需要加密的消息,然后使用 encrypt 方法对它加密。我打印出加密的文本,然后你可以看到你再也读不懂它了。为了解密出我们的秘密消息,我们只需调用 decrypt 方法,并传入加密的文本作为参数。结果就是我们得到了消息字节串形式的纯文本。

    以上浅显地介绍了cryptography 包的使用。不过这也确实给了你一个关于如何加密解密字符串的简述。请务必阅读文档,做做实验,看看还能做些什么!

    下面附带一个des对称加密的python实现方法:

    from pyDes import des, CBC, PAD_PKCS5
    import binascii
    
    # 秘钥
    KEY = 'mHAxsLYz'
    
    def des_encrypt(s):
        """
        DES 加密
        :param s: 原始字符串
        :return: 加密后字符串,16进制
        """
        secret_key = KEY
        iv = secret_key
        k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
        en = k.encrypt(s, padmode=PAD_PKCS5)
        return binascii.b2a_hex(en)
    
    def des_descrypt(s):
        """
        DES 解密
        :param s: 加密后的字符串,16进制
        :return:  解密后的字符串
        """
        secret_key = KEY
        iv = secret_key
        k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
        de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
        return de
    
    test = des_encrypt("panchao")
    print(test)
    print(des_descrypt(test))

    希望能帮到需要的人。

     
  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/573734817pc/p/11088858.html
Copyright © 2011-2022 走看看