java aes 256 ecb解密_python Crypto AES-256-ECB 与PHP之间完成加解密

AES算法描述:

首先AES是一种对称加密算法。

算法特点:

1、AES的区块长度固定为128 比特(16字节)。

# 因此在加密前需要对待加密字符串进行填充,长度填充至128bit整数倍。

2、密钥长度可以是128(AES-128-ECB),192(AES-192-ECB)或256(AES-256-ECB)比特。

# 在加解密前需要对加密密钥进行填充,填充至对应位数。

1、php:aes-256-ecb解密:

2、python:aes-256-ecb加解密(1、代码是从别的博客搬过来后修改的;2、python是基于python2.7.2)

import base64

from Crypto.Cipher import AES

class AESCipher():

def __init__(self, key):

self.key = key

self.key = key + (32-len(key)) * chr(0)

# self.key = key + (24-len(key)) * chr(0) # AES-192-ECB

# self.key = key + (16-len(key)) * chr(0) # AES-128-ECB

self.BLOCK_SIZE = 16 # Bytes

self.pad = lambda s: s + (self.BLOCK_SIZE - len(s) % self.BLOCK_SIZE) * chr(self.BLOCK_SIZE - len(s) % self.BLOCK_SIZE)

self.unpad = lambda s: s[:-ord(s[len(s) - 1:])]

def encrypt(self, raw):

raw = self.pad(raw)

cipher = AES.new(self.key, AES.MODE_ECB)

return base64.b64encode(cipher.encrypt(raw))

def decrypt(self, enc):

enc = base64.b64decode(enc)

cipher = AES.new(self.key, AES.MODE_ECB)

return self.unpad(cipher.decrypt(enc))

3、openssl 命令行:

cat "加密串" | openssl enc -aes-256-ecb -e -K base64encode("16位加密密钥")  -iv 000 -a -nopad

# 其中在ECB模式下是不需要初始化向量IV,(ECB是直接按照拆分后数据块加解密的),但是不接IV是会在命令行报错的,(上述PHP代码中的IV其实是可以省略的)

总结:

AES-ECB,是将原始字符串分成128bit的若干数据块进行加解密的、当密钥长度为192时为AES-192-ECB模式;密钥长度为256时为AES-256-ECB模式。

坑:

当密钥长度为16字节时,在PHP与OpenSSL命令行中,只要修改加解密模式,原始密钥不需要进行修改就能完成相应功能,但是python作为世界上第二号的语言,只能自己修改密钥长度、自己扩充输入源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值