Python加密,Java解密----AES_CBC

18 篇文章 1 订阅
4 篇文章 0 订阅

  最近项目里用到加密解密,本来有过一点儿这方面的经验,然而这次并没有非常顺利,反而还浪费了好几天的时间。于是趁热打铁,记录总结下这方面的知识。当然,都只是使用,具体的算法没去了解。
  不管什么语言的加密算法网上有很多了,项目里采用的是后端Python加密,客户端Android(Java)解密。Python中有加密解密的库Cryptojava中有封装好的Cipher,具体使用如下:

Python加密

  Python中有加密解密的库Crypto,可以直接导入AES,先安装Crypto模块:

pip install pycryptodome

  注意:网上大多数都是使用pip install pycryto这个模块的,但是这个库已经停止维护了,而且安装过程还是报error: Microsoft Visual C++ 14.0 is required. 的错误。如果没错的话,应该也可以用吧,项目紧,没仔细研究过。

  然后导入AES

from Crypto.Cipher import AES

最终的代码:

#! -*- coding:utf-8 -*-
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

PADDING = '\0'


# 加密的内容必须是16的倍数,不够就用\0补全
def pad_text(text):
    return text + (16 - len(text) % 16) * PADDING


# 加密
def encrypt(text, key, iv):
    text = pad_text(text)
    cryptor = AES.new(key, AES.MODE_CBC, iv)
    encrypted_text = b2a_hex(cryptor.encrypt(bytes(text, 'utf-8')))
    # 因为AES加密时候得到的字符串不一定是ascii字符集的,保存时候可能存在问题,所以转化为16进制字符串
    return encrypted_text


# 解密
def decrypt(text, key, iv):
    cryptor = AES.new(key, AES.MODE_CBC, iv)
    # 将16进制字符串转化为二进制字符串再进行解密
    decrypted_text = cryptor.decrypt(a2b_hex(text))
    return decrypted_text


if __name__ == '__main__':
    result = encrypt('qwerasdfzxcv1234', b'1234567890123456', b'1234567890123456')
    print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值