遇到一个问题,php AES算法中,由于可以使用mcrypt_create_iv 生成一种随机的iv,使用的是MCRYPT_MODE_ECB模式。我这里需要用python来实现这种算法。
PHP版本:
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)
相关推荐
文件操作也是不可或缺的知识点,包括打开、读取、写入和关闭文件,以及使用with语句来自动管理资源。 Python 3的模块系统使得代码重用变得简单。你会学习如何导入和使用标准库中的模块,如os、sys、math和datetime...
Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档Pytho3.6 文档
AES密钥和HMAC密钥是使用hashlib的scrypt和一个随机的16字节盐从用户密码生成的(密钥的创建时间是创建密钥的两倍,每个密钥分成两半)。 CTR IV由一个随机的10字节随机数和一个从0开始的6字节计数器创建。salt被写...
- **Alex Martelli**(《Python in a Nutshell》作者)认为本书深度和广度兼备,非常适合读者学习和实践Python编程。 - **David Mertz**(IBM DeveloperWorks 博士)认为本书是当前最好的Python学习书籍之一,优于...
本篇文章将深入探讨如何使用Python来实现图片风格转换,这是一个结合了计算机视觉和深度学习的有趣应用。 图片风格转换是将一张图片(内容图片)的结构信息与另一张图片(风格图片)的风格信息融合,生成一张新的...
Python是世界上最受欢迎的编程语言之一,特别是在数据科学、...通过安装`visualcppbuildtools_full.exe`,开发者可以获得必要的编译环境,从而能够成功安装和使用那些需要C/C++支持的Python库,包括多线程相关的模块。
Pytho arcpy Pycharm
在这个“ask-alexa-pykit-master”中,我们可以预期找到一系列Python模块和类,这些模块和类可以帮助开发者轻松地处理与Alexa服务的通信,包括但不限于: 1. **初始化配置**:SDK通常会包含一个初始化函数,允许...
Linux服务器的常用工具和安装shell脚本。安装脚本包括:PHP、NodeJS、Python、GCC、Git、SVN、ES、ZK、Redis、MySQL、MongoDB、PostgreSQL、nginx
总结,"使用matrix-nio在python中创建矩阵机器人的模板_Pytho.zip"项目提供了在Python中快速构建Matrix机器人的基础框架。通过理解Matrix协议、使用Matrix-NIO库以及熟悉模板结构,开发者可以轻松创建具有各种功能的...
这个项目旨在提供一个非常有趣和令人愉快的纸牌游戏。该游戏使用Tkinter库来复制纸牌纸牌游戏的实际游戏玩法。这只是使用Python编程语言开发游戏的基本练习。 纸牌纸牌游戏仅使用Python编程语言开发。该应用程序的...
"Part 3 - Classification"则涵盖了分类问题,如逻辑回归、决策树和随机森林等。这些模型用于预测离散类别的结果。在这里,你将学习如何使用交叉验证来选择最佳模型,并使用混淆矩阵和其他度量标准来评估模型的准确...
5. **高级加密**:在信息安全日益重要的今天,Python提供了许多加密库,如cryptography和pycryptodome,可以实现AES、RSA等加密算法,确保数据传输和存储的安全。这些库支持加密、解密、签名、验证等多种功能,对于...
在这个压缩包“应变梯度理论模拟(Abaqus上的Python和Fortran)_Pytho.zip”中,包含的项目“pantographe-mechanics-simulation-master”很可能是一个使用Abaqus进行应变梯度模拟的开源研究或教学项目。Abaqus是一款...
用pytho实现烟花特效的步骤及代码示例用pytho实现烟花特效的步骤及代码示例用pytho实现烟花特效的步骤及代码示例用pytho实现烟花特效的步骤及代码示例用pytho实现烟花特效的步骤及代码示例用pytho实现烟花特效的步骤...
免疫等离子体算法的实现 免疫等离子体算法的实现-python-matlab实现源码 ...2、通过第三方代下载,而不是直接自己账号在csdn官方下载,博主不对下载的资源作任何保证,且不提供任何形式的技术支持和答疑!!!
关于使用Python编写网络爬虫的知识点,可以分为以下几个部分: 1. Python语言基础:网络爬虫的编写是Python编程应用的一个方面,因此学习者需要掌握Python语言的基础知识,如基本语法、数据类型、控制结构、函数、...
本文将详细介绍在Python环境下,如何使用socket传输包括图片和视频在内的各种文件。文章内容涵盖了服务器端和客户端的代码实现,以及文件处理的相关方法。 首先,介绍网络通信的基本概念。网络通信涉及到客户端...
4. 超参数调优:使用网格搜索、随机搜索或贝叶斯优化来寻找最优模型配置。 5. 模型解释:如 LIME 和 SHAP 方法,帮助理解黑盒模型的决策过程。 总的来说,Python 为机器学习提供了强大的工具和资源,使得数据科学家...
这个文档集是Python 3.8.2的中文官方帮助文档,对于学习和使用Python 3.8.2的开发者来说,是一个非常宝贵的资源。 文档内容通常包括以下几个部分: 1. **语言参考**:这部分详细介绍了Python 3.8.2的语言语法,如...