GBase8c aes_encrypt和aes_decrypt函数
在数据库中,aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。
GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别:
1、GBase8c 中的初始化向量init_vector不能为空
2、MySQL的加密模块block_encryption_mode 为aes-128-ecb,GBase8c 不支持aes-128-ecb,默认加密模块为aes-128-cbc
3、GBase8c 中该函数仅在MY兼容模式时(即sql_compatibility = ‘B’)有效,其他类型不支持该函数。
4、初始化向量init_vector需要大于16字节
aes_encrypt(str, key_str, init_vector)
描述:基于AES算法,使用密钥字符串key_str和初始化向量init_vector对字符串str进行加密。参数解释:
-- str:需要被加密的字符串。若str为NULL,函数返回NULL。-- key_str:密钥字符串。若key_str为NULL,函数返回NULL。为了安全,对于128bit/192bit/256bit的密钥长度(由块加密模式block_encryption_mode确定,参数介绍请参见安全配置),建议用户使用128bit/192bit/256bit的安全随机数作为密钥字符串。-- init_vector:为需要它的块加密模式提供初始化变量,长度大于等于16字节(大于16的字节会被在自动忽略)。str和key_str均不为NULL时,该参数不可为NULL,否则报错。为了安全,建议用户在OFB模式下,保证每次加密IV值的唯一性;在CBC模式和CFB模式下,保证每次加密的IV值不可被预测。返回值类型:text
aes_decrypt(pass_str, key_str, init_vector)
描述:基于AES算法,使用密钥字符串key_str和初始化向量init_vector对字符串str进行解密。参数解释:
-- pass_str:需要被解密的字符串。若pass_str为NULL,函数返回NULL。-- key_str: 密钥字符串。若key_str为NULL,函数返回NULL。为了安全,对于128bit/192bit/256bit的密钥长度(由块加密模式block_encryption_mode确定,默认参数为 aes-128-cbc ),建议用户使用128bit/192bit/256bit的安全随机数作为密钥字符串。-- init_vector:为需要它的块解密模式提供初始化变量,长度大于等于16字节(大于16的字节会被在自动忽略)。pass_str和key_str均不为NULL时,该参数不可为NULL,否则报错。为了安全,建议用户在OFB模式下,保证每次加密IV值的唯一性;在CBC模式和CFB模式下,保证每次加密的IV值不可被预测。返回值类型:text
aes-128-cbc 加解密对应的java代码
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;/*** 测试 AES-128-CBC 加解密 (base64、hex)* 注意:在java中,加解密的key 需要大于等于16字节*/
public class Aes128CbcEncryptFullUtil {/*** select hex(aes_encrypt('hello,world', '100860147#.qwert','10010963@Axcvbnm')) from dual;* select to_base64(aes_encrypt('hello,world', '100860147#.qwert','10010963@Axcvbnm')) from dual;*/// AES加密密钥private static String KEY = "100860147#.qwert";// AES加密向量private static String IV = "10010963@Axcvbnm";// 使用Base64进行加密public static String encryptToBase64(String data, String key, String iv) throws Exception {try {// 创建AES加密器Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());// 初始化加密器cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);// 执行加密操作byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));// 将加密结果转换为Base64字符串并返回return base64Encode(encrypted);} catch (Exception e) {e.printStackTrace();return null;}}// 使用Base64进行解密public static String desEncryptFromBase64(String data, String key, String iv) throws Exception {try {// 将Base64字符串解码为字节数组byte[] encrypted = base64Decode(data);// 创建AES解密器Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());// 初始化解密器cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);// 执行解密操作byte[] original = cipher.doFinal(encrypted);// 将解密结果转换为字符串并返回return new String(original, StandardCharsets.UTF_8).trim();} catch (Exception e) {e.printStackTrace();return null;}}// 使用16进制进行加密public static String encryptToHex(String data, String key, String iv) throws Exception {try {// 创建AES加密器Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());// 初始化加密器cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);// 执行加密操作byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));// 将加密结果转换为16进制字符串并返回return bytesToHex(encrypted);} catch (Exception e) {e.printStackTrace();return null;}}// 使用16进制进行解密public static String desEncryptFromHex(String data, String key, String iv) throws Exception {try {// 将16进制字符串转换为字节数组byte[] encrypted = hexStringToByteArray(data);// 创建AES解密器Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());// 初始化解密器cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);// 执行解密操作byte[] original = cipher.doFinal(encrypted);// 将解密结果转换为字符串并返回return new String(original, StandardCharsets.UTF_8).trim();} catch (Exception e) {e.printStackTrace();return null;}}// 将字节数组转换为16进制字符串public static String bytesToHex(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte b : bytes) {sb.append(String.format("%02X", b));}return sb.toString();}// 将16进制字符串转换为字节数组public static byte[] hexStringToByteArray(String s) {int len = s.length();byte[] data = new byte[len / 2];for (int i = 0; i < len; i += 2) {data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));}return data;}// 使用Base64进行编码public static String base64Encode(byte[] bytes) {return Base64.getEncoder().encodeToString(bytes);}// 使用Base64进行解码public static byte[] base64Decode(String str) {return Base64.getDecoder().decode(str);}public static void main(String[] args) throws Exception {String data = "hello,world";// 使用Base64进行加密String base64Encrypt = encryptToBase64(data, KEY, IV);System.out.println("加密数据 (Base64): " + base64Encrypt);// 使用Base64进行解密String base64Decrypt = desEncryptFromBase64(base64Encrypt, KEY, IV);System.out.println("解密数据 (Base64): " + base64Decrypt);// 使用16进制进行加密String hexEncrypt = encryptToHex(data, KEY, IV);System.out.println("加密数据 (Hex): " + hexEncrypt);// 使用16进制进行解密String hexDecrypt = desEncryptFromHex(hexEncrypt, KEY, IV);System.out.println("解密数据 (Hex): " + hexDecrypt);}
}
相关文章:
GBase8c aes_encrypt和aes_decrypt函数
在数据库中,aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。 GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别: 1、GBase8c 中的初始化向量init_vector不能为空 2、MySQL的加密模块block_encryption_mode 为aes-128-ecb,…...

【2024年华为OD机试】(B卷,100分)- 数据分类 (Java JS PythonC/C++)
一、问题描述 题目描述 对一个数据a进行分类,分类方法为: 此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。 比如一个数据a=0x010…...

机器学习 vs 深度学习
目录 一、机器学习 1、实现原理 2、实施方法 二、深度学习 1、与机器学习的联系与区别 2、神经网络的历史发展 3、神经网络的基本概念 一、机器学习 1、实现原理 训练(归纳)和预测(演绎) 归纳: 从具体案例中抽象一般规律…...

flutter_学习记录_00_环境搭建
1.参考文档 Mac端Flutter的环境配置看这一篇就够了 flutter的中文官方文档 2. 本人环境搭建的背景 本人的电脑的是Mac的,iOS开发,所以iOS开发环境本身是可用的;外加Mac电脑本身就会配置Java的环境。所以,后面剩下的就是&#x…...

SpringBoot如何自定义Starter ?
大家好,我是锋哥。今天分享关于【SpringBoot如何自定义Starter ?】面试题。希望对大家有帮助; SpringBoot如何自定义Starter ? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Spring Boot 中,自定义 Starter 是一种将应用程…...
前沿技术对比:大模型技术为什么发展远快于区块链技术,中英对照解释
文章目录 前言1、技术复杂性与成熟度 / Technical Complexity and Maturity2.、应用场景与行业需求 / Application Scenarios and Industry Demand3、监管与法律问题 / Regulatory and Legal Issues4、去中心化与网络效应 / Decentralization and Network Effects5、能源消耗与…...

WordPress果果对象存储插件
将网站上的图片等静态资源文件上传至七牛云对象存储,可以减轻服务器文件存储压力,提升静态文件访问速度,从而加速网站访问速度。 支持:阿里云对象存储、华为云对象存储、百度云对象存储、腾讯云对象存储、七牛云对象存储。 下载…...
elk 安装
创建elk网络 docker network create -d bridge elkelasticsearch 创建目录 mkdir -p /data/elasticsearch/{conf,logs,data,plugins}vim /data/elasticsearch/conf/elasticsearch.ymlcluster.name: "es-cluster" network.host: 0.0.0.0 xpack.security.enabled: tr…...

Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标签文本进行训练,是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…...
OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap(使用单位矩阵 R…...
用 Java 发送 HTML 内容并带附件的电子邮件
实现思路 首先,设置邮件服务器的相关属性,包括是否需要认证、使用的邮件协议、服务器地址、端口等。 创建一个会话对象,使用 Session.getInstance 方法,并提供邮件服务器的属性和认证信息。 创建一个 MimeMessage 对象作为邮件消…...
【Day24 LeetCode】贪心Ⅱ
一、贪心Ⅱ 1、买卖股票的最佳时机 II 122 这题第一想法是使用动态规划做,每天有两个状态,持有股票和非持有股票,每次计算这两个状态下的最优值。 class Solution { public:int maxProfit(vector<int>& prices) {//表示当前 没有…...

vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)
管理员管理 搭建管理员页面 在views中创建一个manager文件夹,并创建ManagerIndexView.vue、MangagerListView.vue、UserList.vue <!-- src/views/manager/ManagerIndexView.vue --> <template><!-- 作为一个占位符,用于渲染与当前 URL…...
上位机知识篇---ROS2命令行命令静态链接库动态链接库
文章目录 前言第一部分:ROS2命令行命令1. 基础命令(1)ros2 run(2)ros2 launch(3)ros2 node(4)ros2 topic(5)ros2 service(6࿰…...

2025/1/21 学习Vue的第四天
睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候,普通得定义一个对象与属性。 <!DOCTYPE html> <h…...

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?
引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中,云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨,为从业者提供了宝贵…...

Linux内核编程(二十一)USB驱动开发-键盘驱动
一、驱动类型 USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

模拟算法习题篇
在算法中,模拟是一种通过计算机程序来模拟现实世界中的过程或系统行为的方法。它的核心思想是根据题目给定的规则和逻辑,按照步骤细致地重现事件的发展流程,从而获得最终结果。 解题时如何使用模拟算法: 理解题目规则:…...
蓝桥杯真题 - 翻转 - 题解
题目链接:https://www.lanqiao.cn/problems/3520/learning/ 个人评价:难度 1 星(满星:5) 前置知识:无 整体思路 贪心,除了第一位跟最后一位,其它字符,每当 S [ i ] ≠…...

IP属地与视频定位位置不一致:现象解析与影响探讨
在数字化时代,IP属地和视频定位位置已成为我们获取网络信息、判断内容真实性的重要依据。然而,有时我们会发现,某些视频内容中展示的定位位置与其发布者的IP属地并不一致。这种不一致现象引发了广泛的关注和讨论。本文旨在深入剖析IP属地与视…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...