美文网首页
Web API09-利用JavaAES加密python3解密

Web API09-利用JavaAES加密python3解密

作者: 筱媛媛 | 来源:发表于2019-07-12 23:17 被阅读0次

接口测试为了数据传输的安全性防止数据泄露,很多时候我们不仅请求进行加密,连得到的响应内容也是加密的。如何将这些加密的内容进行解密将是本篇文章讲述的重点。本篇文章将对“利用JavaAES加密python3解密”进行讲解,希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!

01:AES(Advanced Encryption Standard)

1)概述:高级加密标准,它是一种对称加密算法AES只有一个密钥,这个密钥既用来加密也用于解密

2)模式:主要有ECB、CBC、CFB和OFB

ECB模式(电子密码本模式:Electronic codebook)
CBC模式(密码分组链接:Cipher-block chaining)
CFB模式(密文反馈:Cipher feedback)
OFB模式(输出反馈:Output feedback)

AES的几种模式具体就不详细介绍了,如果感兴趣可以自行研究。

02:需求描述

1)加密要求:整个请求或回复的json进行AES对称加密后再进行Base64加密---开发java代码实现

2)问题发现:通过不断尝试和百度得出“python没有秘钥生成器,而java有”

3)解决方案:利用python解密java加密的文件时需要由java密钥生成器去生成一个序列值,此值是python中的秘钥

4)安装命令:pip install pycryptodome

03:代码实现
from Crypto.Cipher import AES
import base64
import pprint

#根据已知的key由java生成一个秘钥
key = base64.b64decode("Tam0ueCGSnhWuaD0OXVnGA==")

def pkcs7padding(text):
    '''
    明文使用PKCS7填充
    最终调用AES加密方法时,传入的是一个byte数组,要求是16的整数倍,因此需要对明文进行处理
    :param text: 待加密内容(明文)
    :return:
    '''
    bs = AES.block_size  # 16
    length = len(text)
    bytes_length = len(bytes(text, encoding='utf-8'))
    padding_size = length if (bytes_length == length) else bytes_length
    padding = bs - padding_size % bs
    padding_text = chr(padding) * padding
    return text + padding_text

def pkcs7unpadding(text):
    '''
    处理使用PKCS7填充过的数据
    :param text:解密后的字符串
    :return:
    '''
    length = len(text)
    unpadding = ord(text[length - 1])
    return text[0:length - unpadding]

# AES加密
def encrypt_aes(source_str):
    generator = AES.new(key, AES.MODE_ECB)# 初始化加密器
    crypt = generator.encrypt(pkcs7padding(source_str))
    crypted = str(base64.b64encode(crypt), encoding='utf-8')
    return crypted

# AES解密
def decrypt_aes(crypted_str):
    generator = AES.new(key, AES.MODE_ECB)# 初始化加密器
    crypted_str = base64.b64decode(crypted_str)
    recovery = generator.decrypt(crypted_str)
    decrypted_str = pkcs7unpadding(recovery.decode('utf-8'))
    return decrypted_str

if __name__ == "__main__":
    base_str = "3jmRMfoTSq7TL1RaVMC2YW4c50uzvVYIAR" \
               "en0AGsOrqdZSyPneGJq14kZElZnzpX76u0" \
               "GPUmzKrAFtbNpknr3qNOodZ7+x0ynGWoaD" \
               "+OPkcN2diixAHWoBqurDiNyaFzBolnV8y0azIsjXDBr4mMIQ=="
    decode_str = decrypt_aes(base_str)
    pprint.pprint(decode_str)

相关文章

  • Web API09-利用JavaAES加密python3解密

    接口测试为了数据传输的安全性防止数据泄露,很多时候我们不仅请求进行加密,连得到的响应内容也是加密的。如何将这些加密...

  • 加密解密签名验签学习

    1,加密解密 1.1加密:发送方利用接收方的公钥对要发送的明文进行加密。1.2解密:接受方利用自己的私钥进行解密。...

  • CryptoJS 使用

    数组加密,Utf8编码,传递,加解密 加密,Base64编码,传递,解密 引用PHP 和 Web 端对称加密传输|...

  • python 加密解密

    Python 利用 pyDes对字符串进行解密 base64加密解密 md5加密

  • Bugku------加密

    还是新人,有错误希望大家多多指出。 web中经常可以遇到加密解密的题型,这里找bugku的加密解密题型练练手。 滴...

  • 加密解密 签名验签学习

    基本概念: 加密:发送方利用接受方的公钥对要发送的明文进行加密。 解密:接收方利用自己的私钥进行解密。 公钥与私钥...

  • 加密 解密 签名 验签

    几个基本概念: 加密:发送方利用接收方的公钥对要发送的明文进行加密。 解密:接受方利用自己的私钥进行解密。 公钥和...

  • iOS使用MIHCrypto进行RSA私钥加密公钥解密

    最近公司项目有个需求,在客户端实现利用私钥进行RSA加密,公钥进行解密的需求。之前做过的都是公钥加密私钥解密,而且...

  • AES加密代码(.net和java可互转)

    .net加密解密代码 java加密解密代码

  • 利用Python加密解密

    拥有密钥就可以加密解密,方便隐私通信实现方案如下: 设置密钥,只有接发双方才拥有 写好明文,密钥介入进行加密 接受...

网友评论

      本文标题:Web API09-利用JavaAES加密python3解密

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