• java python AES 加密 对比


    /**
         * aes解密
         * @param
         * @param content  密文
         * @return
         */
        public static String AESDncode(String appkey, String content) {
            try {
                // 1.构造密钥生成器,指定为AES算法,不区分大小写
                KeyGenerator keygen = KeyGenerator.getInstance("AES");
                // 2.根据ecnodeRules规则初始化密钥生成器
                SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
                secureRandom.setSeed(appkey.getBytes());
                // 生成一个128位的随机源,根据传入的字节数组
                keygen.init(128, secureRandom);
                // 3.产生原始对称密钥
                SecretKey original_key = keygen.generateKey();
                // 4.获得原始对称密钥的字节数组
                byte[] raw = original_key.getEncoded();
                // 5.根据字节数组生成AES密钥
                SecretKey key = new SecretKeySpec(raw, "AES");
                // 6.根据指定算法AES自成密码器
                Cipher cipher = Cipher.getInstance("AES");
                // 7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY
                cipher.init(Cipher.DECRYPT_MODE, key);
                // 8.将加密并编码后的内容解码成字节数组
                byte[] byte_content = new BASE64Decoder().decodeBuffer(content);
                /*
                 * 解密
                 */
                byte[] byte_decode = cipher.doFinal(byte_content);
                String AES_decode = new String(byte_decode, "utf-8");
                return AES_decode;
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            // 如果有错就返加nulll
            return null;
        }
    import base64
    import hashlib
    from Crypto.Cipher import AES as _AES
    
    
    class AES:
    
        def __init__(self, key: str):
            """Init aes object used by encrypt or decrypt.
            AES/ECB/PKCS5Padding  same as aes in java default.
            """
    
            self.aes = _AES.new(self.get_sha1prng_key(key), _AES.MODE_ECB)
    
    
        @staticmethod
        def get_sha1prng_key(key: str) -> bytes:
            """encrypt key with SHA1PRNG.
            same as java AES crypto key generator SHA1PRNG.
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
            secureRandom.setSeed(decryptKey.getBytes());
            keygen.init(128, secureRandom);
            :param string key: original key.
            :return bytes: encrypt key with SHA1PRNG, 128 bits or 16 long bytes.
            """
    
            signature: bytes = hashlib.sha1(key.encode()).digest()
            signature: bytes = hashlib.sha1(signature).digest()
            return signature[:16]
        
    
        @staticmethod
        def padding(s: str) -> str:
            """Padding PKCS5"""
    
            pad_num: int = 16 - len(s) % 16
            return s + pad_num * chr(pad_num)
    
    
        @staticmethod
        def unpadding(s):
            """Unpadding PKCS5"""
            
            padding_num: int = ord(s[-1])
            return s[: -padding_num]
    
        
        def encrypt_to_bytes(self, content_str):
            """From string encrypt to bytes ciphertext.
            """
    
            content_bytes = self.padding(content_str).encode()
            ciphertext_bytes = self.aes.encrypt(content_bytes)
            return ciphertext_bytes
        
    
        def encrypt_to_base64(self, content_str):
            """From string encrypt to base64 ciphertext.
            """
    
            ciphertext_bytes = self.encrypt_to_bytes(content_str)
            ciphertext_bs64 = base64.b64encode(ciphertext_bytes).decode()
            return ciphertext_bs64
    
    
        def decrypt_from_bytes(self, ciphertext_bytes):
            """From bytes ciphertext decrypt to string.
            """
            
            content_bytes = self.aes.decrypt(ciphertext_bytes)
            content_str = self.unpadding(content_bytes.decode())
            return content_str
    
    
        def decrypt_from_base64(self, ciphertext_bs64):
            """From base64 ciphertext decrypt to string.
            """
    
            ciphertext_bytes = base64.b64decode(ciphertext_bs64)
            content_str = self.decrypt_from_bytes(ciphertext_bytes)
            return content_str
    
    
    def encrypt_to_bytes(content_str, encrypt_key: str):
        """From string encrypt to bytes ciphertext.
        """
    
        aes: AES = AES(encrypt_key)
        ciphertext_bytes = aes.encrypt_to_bytes(content_str)
        return ciphertext_bytes
    
    
    def encrypt_to_base64(content_str, encrypt_key: str) -> str:
        """From string encrypt to base64 ciphertext.
        """
    
        aes: AES = AES(encrypt_key)
        ciphertext_bs64 = aes.encrypt_to_base64(content_str)
        return ciphertext_bs64
    
    
    def decrypt_from_bytes(ciphertext_bytes, decrypt_key: str) -> str:
        """From bytes ciphertext decrypt to string.
        """
        
        aes: AES = AES(decrypt_key)
        content_str = aes.decrypt_from_bytes(ciphertext_bytes)
        return content_str
    
    
    def decrypt_from_base64(ciphertext_bs64, decrypt_key: str) -> str:
        """From base64 ciphertext decrypt to string.
        """
    
        aes: AES = AES(decrypt_key)
        content_str = aes.decrypt_from_base64(ciphertext_bs64)
        return content_str
    
    
    if __name__ == "__main__":
        key = "57bf1661-3aad-4786-89a2-e187b38966ea"
        ct = "uafBlgURdmIJtSSe5Li/V1mByS3XZrpjXL+F/FCJmmro1bczVkVuHBBGcIk+Msi6hRSdCyJGZ+ox
    RHEA/QL0WjNXqw0BhgXE6oWYe/d0o3w="
        ret = decrypt_from_base64(ct, key)
        print(ret)

    测试可行!!!

  • 相关阅读:
    动态规划(决策单调优化):BZOJ 4518 [Sdoi2016]征途
    数据结构(树链剖分,线段树):SDOI 2016 游戏
    图论(费用流):BZOJ 4514 [Sdoi2016]数字配对
    搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表
    数据结构(KD树):HDU 4347 The Closest M Points
    数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑
    数学:UVAoj 11174 Stand in a Line
    线性代数(矩阵乘法):POJ 2778 DNA Sequence
    线性代数(矩阵乘法):NOI 2007 生成树计数
    线性代数(矩阵乘法):POJ 3233 Matrix Power Series
  • 原文地址:https://www.cnblogs.com/whm-blog/p/12808176.html
Copyright © 2020-2023  润新知