• 字符加密


    # coding=utf-8
    
    import  random
    import hashlib
    import rsa
    from Cryptodome.Cipher import DES
    import binascii
    from Cryptodome.Cipher import AES
    from Cryptodome import Random
    
    def encryption(type,str):
        '''字符串加密'''
    
        if type in ('MD5', 'md5'):
            '''MD5加密'''
            m = hashlib.md5()
            m.update(str.encode("utf8"))
            return m.hexdigest()
    
        elif type in ('SHA1','sha1'):
            '''SHA1加密'''
            m = hashlib.sha1()
            m.update(str.encode(encoding='utf-8'))
            return m.hexdigest()
    
        elif type in ('SHA256' , 'sha256'):
            '''SHA256加密'''
            m = hashlib.sha256()
            m.update(str.encode(encoding='utf-8'))
            return m.hexdigest()
    
        elif type in ('SHA224' , 'sha224'):
            '''SHA224加密'''
            m = hashlib.sha256()
            m.update(str.encode(encoding='utf-8'))
            return m.hexdigest()
    
        elif type in ('SHA512' , 'sha512'):
            '''SHA512加密'''
            m = hashlib.sha512()
            m.update(str.encode(encoding='utf-8'))
            return m.hexdigest()
    
        elif type in ('SHA384' , 'sha384'):
            '''SHA384加密'''
            m = hashlib.sha512()
            m.update(str.encode(encoding='utf-8'))
            return m.hexdigest()
    
        elif type in ('RSA' , 'rsa'):
            '''RSA加密'''
            key = rsa.newkeys(300)  # 生成随机密钥
            privateKey = key[1]  # 私钥
            publicKey = key[0]  # 公钥
            cryptedMessage = rsa.encrypt(str.encode(), publicKey)
    
            # RSA解密过程
            message = rsa.decrypt(cryptedMessage, privateKey)
            message = message.decode()
    
            return cryptedMessage
    
        elif type in ('DES','des'):
            '''DES加密'''
            # 设置一个密钥
            key = b'abcdefgh'   #需要8位密钥
            # 需要去生成一个DES对象
            des = DES.new(key, DES.MODE_ECB)
            text = str + (8 - (len(str) % 8)) * '='    #字符串最少16位,缺少自动在尾部添加'='至16位字符
            #DES加密
            encrypt_text = des.encrypt(text.encode())
            encrypt_text = binascii.b2a_hex(encrypt_text)
    
            # DES解密过程
            decrypt_text = binascii.a2b_hex(encrypt_text)
            decrypt_text = des.decrypt(decrypt_text)
    
            return encrypt_text
        elif type in ('AES' , 'aes'):
            '''AES加密'''
            #密钥  16位
            key = b'abcdefghijklmnop'
            # 生成长度等于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(str.encode())
    
            # 解密的话要使用key和iv生成新的AES对象
            mydecrypt = AES.new(key, AES.MODE_CFB, ciphertext[:16])
            # 使用新生成的AES对象,将加密的密文解密
            decrypttext = mydecrypt.decrypt(ciphertext[16:])
    
            return ciphertext
    
        elif type in ('XOR','xor'):
            '''异或加密'''
            # 加密
            key = 'abcde'  # 密钥
            ml = len(str)  # 分别得到密钥和明文的长度
            kl = len(key)
            key = ml // kl * key + key[:ml % kl]  # 因为要一对一的异或,所以key要变化
            pwd = []  # 通过取整,求余的方法重新得到key
            for i in range(len(key)):
                pwd.append(chr(ord(key[i]) ^ ord(str[i])))  # 一对一异或操作,得到结果,其中,"ord(char)"得到该字符对应的ASCII码,"chr(int)"刚好相反
            #密文
            secret = ''.join(pwd)

        
    # 解密 result = [] for j in range(len(key)): result.append(chr(ord(secret[j]) ^ ord(key[j]))) # 跟KEY异或回去就是原明文 result = ''.join(result)

    return secret
      else : 
        
    return "type error"

    if __name__ == "__main__":      

      print encryption('xor','qwe123456')
  • 相关阅读:
    从yum源下载软件包
    本地yum源建立
    Redis慢查询,redis-cli,redis-benchmark,info
    Centos6.6安装mysql记录
    Nginx常用命令(加入系统服务)
    Nginx+keepalived双机热备(主从模式)
    Nginx反向代理+负载均衡简单实现
    Centos7安装Python3.5
    CentOS 6.4下OpenSSH升级到6.7操作
    Redis详解
  • 原文地址:https://www.cnblogs.com/Hamge/p/11287267.html
Copyright © 2020-2023  润新知