php,python aes加密反解

2024-06-22 07:04
文章标签 python aes 加密 php 反解

本文主要是介绍php,python aes加密反解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. python版本

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpadclass AESUtilCBC:def __init__(self, key, iv):self.key = key.encode('utf-8')self.iv = iv.encode('utf-8')self.pad_length = AES.block_sizedef encrypt(self, data):try:data = data.encode('utf-8')cipher = AES.new(self.key, AES.MODE_CBC, self.iv)padded_data = pad(data, self.pad_length, style='pkcs7')encrypted_data = cipher.encrypt(padded_data)encoded_data = base64.b64encode(encrypted_data).decode('utf-8')return encoded_dataexcept Exception as e:raise Exception(f"Encryption failed: {str(e)}")def decrypt(self, encrypted_data):try:encrypted_bytes = base64.b64decode(encrypted_data)cipher = AES.new(self.key, AES.MODE_CBC, self.iv)decrypted_data = cipher.decrypt(encrypted_bytes)unpadded_data = unpad(decrypted_data, self.pad_length, style='pkcs7')return unpadded_data.decode('utf-8')except Exception as e:raise Exception(f"Decryption failed: {str(e)}")# 示例使用 AESUtilCBC 类进行加密和解密
# 定义密钥和初始向量(IV)
key = 'Nhic0EAJqsIdMBfs'  # 16字节的密钥
iv = 'Nhic0EAJqsIdMBfs'   # 16字节的初始向量# 创建 AESUtilCBC 类的实例
aes_util = AESUtilCBC(key, iv)# 要加密的数据
data = '123456'# 调用加密方法
encrypted_data = aes_util.encrypt(data)
print(f"加密后的数据: {encrypted_data}")# 调用解密方法
decrypted_data = aes_util.decrypt(encrypted_data)
print(f"解密后的数据: {decrypted_data}")

执行以后是

加密后的数据: Qun8LbhlewyVvRQDzrNCIQ==
解密后的数据: 123456

2. php代码

<?phpuse Exception;class AESUtilCBC
{private $key = 'Nhic0EAJqsIdMBfs';private $iv = 'Nhic0EAJqsIdMBfs';private $algo = 'AES-128-CBC';private $options = OPENSSL_RAW_DATA;public function __construct($key = null, $iv = null, $algo = null, $options = null){if ($key) {$this->key = $key;}if ($iv) {$this->iv = $iv;}if ($algo) {$this->algo = $algo;}if ($options) {$this->options = $options;}}/*** 加密** @param $data* @return false|string*/public function encrypt($data){try {$encryptedData = openssl_encrypt($data, $this->algo, $this->key, $this->options, $this->iv);return base64_encode($encryptedData);} catch (Exception $e) {return false;}}/*** 解密** @param $encryptedData* @return false|string*/public function decrypt($encryptedData){try {$decodedData = base64_decode($encryptedData);return openssl_decrypt($decodedData, $this->algo, $this->key, $this->options, $this->iv);} catch (Exception $e) {return false;}}
}$encrypted_data = (new AESUtilCBC())->encrypt('123456');
print("加密后的数据: {$encrypted_data}<br>");$decrypted_data = (new AESUtilCBC())->decrypt($encrypted_data);
print("解密后的数据: {$decrypted_data}");

执行以后是

加密后的数据: Qun8LbhlewyVvRQDzrNCIQ==
解密后的数据: 123456

3. 其他

1. 在线测试
可以在一些在线网站来进行测试是否加密一致
例如  https://www.ssleye.com/ssltool/aes_cipher.html

在线网站加密

2. 128 256 php和python如何修改
php: $algo可以设置为 AES-128-CBC,AES-256-CBC
python:根据 key 的长度而变化,16位为128, 32位为256
3. iv长度
iv长度必须为16位,key和iv允许一致
4. 加密不一致
如果key的长度不足16或者32位,在php或python代码中进行补全空位,如果补全长度的字符不一致,则会导致加密的不一致
5. php 修改模式
修改 AES-128-CBC 的 CBC 为 ECB 等

这篇关于php,python aes加密反解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083616

相关文章

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习