美文网首页加密-解密
python --版本的对应java的AES-SHA1PRNG

python --版本的对应java的AES-SHA1PRNG

作者: woniuxia | 来源:发表于2021-08-12 10:50 被阅读0次

    环境:
    win10、python3、pycryptodome

    参考:
    (18条消息) python3 - AES 加密实现java中SHA1PRNG 算法_Max's Note-CSDN博客_sha1prng

    代码如下

    import  base64
    from Crypto.Cipher import AES
    from Crypto.Hash import  SHA1
    from Crypto.Util.Padding import pad, unpad
    
    
    class CryptUtils:
        @classmethod
        def aes_en_sha1prng(cls, data, aes_key):
            """
            java AES- SHA1PRNG 方式 加密
            :param data:
            :param aes_key:
            :return:
            """
            aes_key = cls.get_sha1prng_key(aes_key)
            cipher = AES.new(bytes.fromhex(aes_key), AES.MODE_ECB)
            ct = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))
            return base64.b64encode(ct).decode('utf-8')
    
        @classmethod
        def aes_de_sha1prng(cls, data, aes_key):
            """
            java AES- SHA1PRNG 方式 解密
            :param data:
            :param aes_key:
            :return:
            """
            key = cls.get_sha1prng_key(aes_key)
            cipher = AES.new(bytes.fromhex(key), AES.MODE_ECB)
            d_str = cipher.decrypt(base64.b64decode(data.encode('utf-8')))
            return unpad(d_str, AES.block_size).decode('utf-8')
    
        @staticmethod
        def get_sha1prng_key(key):
    
            """
            summary]
            encrypt key with SHA1PRNG
            same as java AES crypto key generator SHA1PRNG
            Arguments:
                key {[string]} -- [key]
    
            Returns:
                [string] -- [hexstring]
            :param key:
            :return:
            """
            signature = SHA1.new(key.encode()).digest()
            signature = SHA1.new(signature).digest()
            return ''.join(['%02x' % i for i in signature]).upper()[:32]
    
    

    相关文章

      网友评论

        本文标题:python --版本的对应java的AES-SHA1PRNG

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