php,python aes加密反解

news2024/11/24 5:51:18

1. python版本

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

class AESUtilCBC:
    def __init__(self, key, iv):
        self.key = key.encode('utf-8')
        self.iv = iv.encode('utf-8')
        self.pad_length = AES.block_size

    def 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_data
        except 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代码

<?php

use 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 等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言| 数组倒置II

数组倒置第二种方法&#xff1a;直接在数组内进行倒置 第一个元素和最后一个元素交换&#xff0c; 第二个元素和倒数第二个元素交换 第三个元素和倒数第三个元素交换...... 数组元素个数为偶数&#xff0c;每个元素都能交换一次&#xff1b; 数组元素个数为奇数&#xff0c;最…

IntelliJ IDE 插件开发 | (十)主题插件开发入门

系列文章 本系列文章已收录到专栏&#xff0c;交流群号&#xff1a;689220994&#xff0c;也可点击链接加入。 前言 在前面的章节中&#xff0c;我们介绍的都是功能性插件的开发内容&#xff0c;本文则会介绍一下主题类插件的开发方式。不过本文也只是带大家入个门&#xff…

HTML静态网页成品作业(HTML+CSS+JS)——动漫斗罗大陆介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播和tab切换&#xff0c;共有3个页面。 …

24.3K star!一个轻量级且高度可配置的现代化命令行文本编辑器

大家好&#xff0c;今天给大家分享的是一个轻量级且高度可配置的现代化命令行文本编辑器。 micro 是一个轻量级且高度可配置的命令行文本编辑器&#xff0c;以其简洁的设计和强大的插件系统著称。该项目强调速度与效率&#xff0c;适合那些追求快速编辑体验并希望保持系统资源占…

ISO14001认证:引领企业迈向绿色未来

在当今全球环境日益恶化的背景下&#xff0c;绿色发展已成为企业和社会共同追求的目标。ISO14001环境管理体系作为由国际标准化组织&#xff08;ISO&#xff09;制定的环境管理国际标准&#xff0c;为企业提供了系统和全面的环境管理框架&#xff0c;适用于各种类型和规模的组织…

TurboWarp简单介绍

1.为什么要下载TurboWarp&#xff1f; 2.下载TurboWarp 在线版&#xff1a;TurboWarp - Run Scratch projects faster 离线版下载&#xff1a;TurboWarp Desktop - Better offline editor for Scratch 3 3.使用 界面&#xff1a; 功能&#xff1a; 上方功能条&#xff1a;…

【办公技巧】如何编辑带有限制编辑密码的PDF文件?

PDF文件打开之后发现设置了限制编辑&#xff0c;功能栏中的编辑按钮都是灰色的&#xff0c;导致PDF文件里的内容无法编辑。那么带有限制编辑的PDF文件&#xff0c;如何编辑&#xff1f;今天分享两个方法。 方法一&#xff1a; 我们可以将PDF文件转换成其他格式&#xff0c;有…

御道源码(ruoyi-vue-pro)个人使用小结

御道源码&#xff08;ruoyi-vue-pro&#xff09;个人使用小结 一、Git地址 1、平台项目简介及地址 2、开发指南&#xff0c;如图所示&#xff0c;部分功能需要收费&#xff0c;可自行了解 二、项目文件夹结构示例&#xff1a; 三、技术介绍 1.基于 Spring Boot MyBatis P…

【CT】LeetCode手撕—415. 字符串相加

目录 题目1- 思路2- 实现⭐415. 字符串相加——题解思路 3- ACM 实现 题目 原题连接&#xff1a;415. 字符串相加 1- 思路 模式识别&#xff1a;字符串相加 逆向遍历过程模拟 数据结构 ① String res &#xff1a;记录res 、② carry 记录进位值① 定义两个整数遍历 nums1 …

算法篇-二叉树

二叉树的遍历 分为前序、中序和后续的遍历&#xff0c;思想就是利用递归。 前序遍历-中左右 代码&#xff1a; public void travelTree(TreeNode node, List<Integer> resulst) {if (node null){return;}// 中resulst.add(node.val);// 左travelTree(node.left, resul…

Hive笔记-4

240618-Hive笔记-4 4.2 Insert 4.2.1 将查询结果插入表中 1) 语法 INSERT (INTO | OVERWRITE) TABLE tablename [PARTITION (partcol1val1,partcol2val2 ...)] select_stamement; 关键字说明: (1) INTO: 将结果追加到目标表 (2) OVERWRITE: 用结果覆盖原有数据 2) 案例…

如何使用代理ip上网移动转电信

在一些特定的工作场景中&#xff0c;比如跨网办公、数据分析等&#xff0c;我们常常需要将网络IP从一种类型转换到另一种类型。如需将移动网络转电信IP代理。那么&#xff0c;如何使用代理IP上网移动转电信呢&#xff1f;接下来&#xff0c;将为您揭示一个便捷的方法&#xff0…

火车头采集器Typecho采集发布模块插件

火车头采集器发布数据到Typecho系统网站应该怎么操作&#xff1f; 1. 火车头采集器Typecho采集发布插件下载安装&#xff1a; 火车头采集器Typecho采集发布模块插件下载地址-CSDN 2. 在火车头采集器软件导Typecho采集发布模块插件&#xff1b; 3. 填写Typecho系统文章对应的…

【Java】已解决java.lang.FileNotFoundException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.FileNotFoundException异常 在Java编程中&#xff0c;java.lang.FileNotFoundException是一个常见的异常&#xff0c;它通常表示程序试图打开一个不存在的文件、文…

ROS机器人虚拟仿真挑战赛持续学习笔记-20240619

cartographer 需要全手工编译……比较麻烦。 如果使用新版ceres-solver&#xff0c;版本2.x&#xff0c;需要修改源码&#xff0c;部分“接口代码”有改动。 稳妥使用ceres-solver-1.13.0&#xff0c;且需要安装abseil-cpp。 验证是否成功&#xff0c;使用roscd或roslaunch…

React+TS前台项目实战(十二)-- 全局常用组件Toast封装,以及rxjs和useReducer的使用

文章目录 前言Toast组件1. 功能分析2. 代码详细注释&#xff08;1&#xff09;建立一个reducer.ts文件&#xff0c;用于管理状态数据&#xff08;2&#xff09;自定义一个清除定时器的hook&#xff08;3&#xff09;使用rxjs封装全局变量管理hook&#xff08;4&#xff09;在to…

Java 图书管理系统功能实现

承接上一篇的 图书管理系统 &#xff0c;点击这里跳转 要实现什么功能 1.查找图书 2.增加图书 3.删除图书 4.展示图书 5.退出系统 6.借阅图书 7.归还图书 1.查找图书 要完成这个功能需要以下步骤 输入书名&#xff0c; 然后在书架里找到这本书打印出来&#xff0c;…

安装CDH时报错:Parcel 不可用于操作系统分配 RHEL7,原因与解决办法~

报错信息&#xff1a; 解决办法与思路&#xff1a; 1、检查CDH包的后缀名称&#xff0c;Redhat与Centos安装时不需要修改后缀名称&#xff0c;麒麟系统安装时才需要修改。 2、目录里面需要有xxx.parcel xxx.parcel.sha manifest.json 三个文件 缺一不可&#xff08;注&#x…

储能电池竞争出海分析

锂电池的激烈竞争进一步蔓延到储能行业。为保市场份额和现金流稳定&#xff0c;不少储能电池企业都开始大幅度降低报价只求中标储能项目。 随着6月的储能电芯的最高限价和系统报价都已经贴近成本价&#xff0c;一二三线的储能电池厂商将要如何应对&#xff1f; 1、储能规模快速…

前端核心框架Vue指令详解

目录 ▐ 关于Vue指令的介绍 ▐ v-text与v-html ▐ v-on ▐ v-model ▐ v-show与v-if ▐ v-bind ▐ v-for ▐ 前言&#xff1a;在学习Vue框架过程中&#xff0c;大家一定要多参考官方API &#xff01; Vue2官方网址https://v2.cn.vuejs.org/v2/guide/ ▐ 关于Vue指令的…