遇到一个问题,php AES算法中,因为能够使用mcrypt_create_iv 生成一种随机的iv,使用的是MCRYPT_MODE_ECB模式。我这里须要用python来实现这种算法。php
PHP版本:python
class Security {
public static function encrypt($input, $key) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$input = Security::pkcs5_pad($input, $size);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
private static function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
public static function decrypt($sStr, $sKey) {
$decrypted= mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$sKey,
base64_decode($sStr),
MCRYPT_MODE_ECB
);
$dec_s = strlen($decrypted);
$padding = ord($decrypted[$dec_s-1]);
$decrypted = substr($decrypted, 0, -$padding);
return $decrypted;
}
}
python 版本:算法
from Crypto.Cipher import AES
import base64
class Bussiness(object):
"""
加密处理类
"""
def __init__(self):
self.key = 'e28a9468a8204621'
self.BS = 16
self.mode = AES.MODE_ECB
def encrypt(self,text):
"""
AES加密方法
"""
encryptor = AES.new(self.key,self.mode)
#补位
padded_text = text + (self.BS - len(text) % self.BS) * chr(self.BS - len(text) % self.BS)
print self.BS - len(text) % self.BS
ciphertext = encryptor.encrypt(padded_text)
return base64.b64encode(ciphertext)
def decrypt(self, text):
cryptor = AES.new(self.key,self.mode)
plain_text = cryptor.decrypt(base64.b64decode(text))
dec_s = len(plain_text)
padding = plain_text[dec_s-1]
#删除补位字符串
return plain_text.rstrip(padding)