zoukankan      html  css  js  c++  java
  • python的加密方式

    MD5加密

    这是一种使用非常广泛的加密方式,不可逆的,在日常字符串加密中经常会用到,下面我简单介绍一下这种方式,主要用到Python自带的模块hashlib,测试代码如下,先创建一个md5对象,然后直接加密就行:

    import hashlib
    
    def MD5(string):
        '''md5加密'''
        h1 = hashlib.md5()     # 创建md5对象
        # 声明encode
        h1.update(string.encode(encoding = 'utf-8'))
        return h1.hexdigest()
    
    if __name__ == "__main__":
        string = "MD5加密"
        print('MD5加密前为:' + string)
        print('MD5加密后为:' + MD5(string))
    

    运行结果:

    MD5加密前为:MD5加密
    MD5加密后为:e5c7bda34849527574a025bc06867c11
    

    哈希加密

    这里以SHA1(安全哈希)为例,简单介绍一下Python是如何进行哈希加密的,也用到hashlib这个模块,测试代码如下,非常简单,先创建sha1对象,然后直接加密就行,这里也支持 SHA224,SHA256等加密方式:

    import hashlib
    
    def hash(string):
        '''哈希加密'''
        h1 = hashlib.sha1()     # 创建hash对象
        # 声明encode
        h1.update(string.encode(encoding = 'utf-8'))
        return h1.hexdigest()
    
    if __name__ == "__main__":
        string = "MD5加密"
        print('MD5加密前为:' + string)
        print('MD5加密后为:' + hash(string))
    

    运行结果:

    hash加密前为:MD5加密
    hash加密后为:983bb73e82bd715e65584ea6580bad4ec321c0f4
    

    DES加密

    这是一个分组加密算法,解密和加密是同一个算法,下面我简单介绍一下这种方式,主要用到pycryptodome这个模块,输入安装命令pip install pycryptodomex,测试代码如下,需要单独定义一个密钥:

    from Cryptodome.Cipher import DES
    import binascii
    
    # 设置一个密钥
    key = b'abcdefgh'
    # 需要去生成一个DES对象
    des = DES.new(key,DES.MODE_ECB)
    # 需要加密的数据
    text = "This is a key!"
    text = text + (8 - (len(text) % 8)) * '='
    print("text:%s" % text)
    
    # DES加密过程
    encrypt_text = des.encrypt(text.encode())
    encrypt_text = binascii.b2a_hex(encrypt_text)
    print("DES加密后:" + encrypt_text.decode())
    
    # DES解密过程
    decrypt_text = binascii.a2b_hex(encrypt_text)
    decrypt_text = des.decrypt(decrypt_text)
    print("DES解密后:" + decrypt_text.decode())
    

    运行结果:

    text:This is a key!==
    DES加密后:a5ee554e36736a5d9b6db2cd9442ff38
    DES解密后:This is a key!==
    

    AES加密

    这也是一种广泛使用的加密方法,是对DES的改进和替代,下面我简单介绍一下这种方式,也用到pycryptodome这个模块,测试代码如下,稍微有些复杂

    from Cryptodome.Cipher import AES
    from Cryptodome import Random
    from binascii import b2a_hex
    
    # 密钥
    key = b'This is a 16 key'
    # 要加密的明文
    data = "AES加密"
    # 生成长度等于AES块大小的不可重复的密钥向量
    iv = Random.new().read(AES.block_size)
    # 使用key和iv初始化AES对象,使用MODE_CFB模式
    mycipher = AES.new(key,AES.MODE_CFB,iv)
    # 加密的明文长度必须为16的倍数
    # 将iv(密钥向量)加到加密的密文开头,一起传输
    ciphertext = iv + mycipher.encrypt(data.encode())
    # 解密的话要使用key和iv生成新的AES对象
    mydecrypt = AES.new(key,AES.MODE_CFB,ciphertext[:16])
    # 使用新生成的AES对象,将加密的密文解密
    decrypttext = mydecrypt.decrypt(ciphertext[16:])
    
    print("ASD加密后:",b2a_hex(ciphertext)[16:])
    print("ASD解密后:",decrypttext.decode())
    

    运行结果:

    ASD加密后: b'18541e53ebfe5eef40d3d4631dc3c313d4'
    ASD解密后: AES加密
    

    RAS加密

    这是一种非对称加密算法,在公开密钥加密和电子商业中经常会用到,下面我简单介绍一下这种方式,主要用到rsa这个模块,安装命令pip install rsa,测试代码如下,需要单独定义一个公钥和私钥

    import rsa
    
    key = rsa.newkeys(3000)   # 生成随机密钥
    privateKey = key[1]   # 私钥
    publicKey = key[0] # 公钥
    message = "RSA加密"   # 要加密的明文
    message = message.encode()
    
    # RSA加密过程
    cryptedMessage = rsa.encrypt(message,publicKey)
    print("RSA加密后:",cryptedMessage)
    
    # RSA解密过程
    message = rsa.decrypt(cryptedMessage,privateKey)
    message = message.decode()
    print("RSA解密后:",message)
    

    运行结果:

    RSA加密后: b"x04xf2xafxbbxe1xffWxd5xabT`.xd8x02xa7x85xdawFx15Qx88xd9xafx9bxb7@gbx8ax81xcex8c2GCV;
    x8ax91NFxd8xb5x99x0bxc5xf9xbax94xd4lx8bxa9axd5x80x98xdebxcbxf9Nx8c'Yx9cXxcaxf5$x07Ax1a@xb6-xc7xb22iNu0xf6x800x9d	Bx93xe2xa5Pxe7'+1*x8aLVxcacxd6x81xfbx0bxeexe9x8bxc4K\x0c/x80x184Tx80xx87xdcxb3=x12x97x8cxa6xecXFx92x87m$x8ex1cxe7x93;1x9a;n`xd8xdb|xbfWx04xfcxbbxec&x8bx91%xd6x12Qexa9x84xd1x0cxacxd7xabGx945W7x12xaexf3#xd4xf9xaed^Cxae'wx8aMx01
    xf9x80x1e	l4x1c)\x98x01]e+[cxf34x99{7xa5.xefSxd6x99xfax9fx7fxe0x9bxa2xf9<p0%xa1iGx02xf9x0coxdexdaxabx96`yxb8xb0xe8xd0 xa9xa1x97@xe7x06xa8xacx19-[Wxefx0fRxb7\Hx0bx15^x0e@x86gxb8xc8U=xe7xffx06
    x93<Pxc3xa4xa5
    x8e5xef+Dx9cM?x1bx11Tx8fxa2xb9xa4,x03nx1exd0xbcx1ftxabx879x11xe9x01xffJxf9x87xb4/jxf1Ox14x19xacx8axb8Cxe5~oxa9]xca,xe4xe6x18rxd9x8f]xa1xf8Gxedx8cxb6Fx9fxabux12xc3x93xf2] XOxb0*xadH0gx88x0cxb9"
    RSA解密后: RSA加密
    
  • 相关阅读:
    【leetcode】Binary Search Tree Iterator
    【leetcode】Palindrome Partitioning II
    【leetcode】Best Time to Buy and Sell Stock III
    【leetcode】Best Time to Buy and Sell Stock II
    【leetcode】Longest Consecutive Sequence
    【leetcode】Factorial Trailing Zeroes
    【leetcode】Simplify Path
    【leetcode】Generate Parentheses
    【leetcode】Combination Sum II
    【leetcode】Combination Sum
  • 原文地址:https://www.cnblogs.com/kadycui/p/11027107.html
Copyright © 2011-2022 走看看