当前位置: 首页 > news >正文

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函数

在数据库中&#xff0c;aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。 GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别&#xff1a; 1、GBase8c 中的初始化向量init_vector不能为空 2、MySQL的加密模块block_encryption_mode 为aes-128-ecb&#xff0c;…...

【2024年华为OD机试】(B卷,100分)- 数据分类 (Java JS PythonC/C++)

一、问题描述 题目描述 对一个数据a进行分类,分类方法为: 此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。 比如一个数据a=0x010…...

机器学习 vs 深度学习

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

flutter_学习记录_00_环境搭建

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

SpringBoot如何自定义Starter ?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot如何自定义Starter ?】面试题。希望对大家有帮助&#xff1b; SpringBoot如何自定义Starter ? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Spring Boot 中&#xff0c;自定义 Starter 是一种将应用程…...

前沿技术对比:大模型技术为什么发展远快于区块链技术,中英对照解释

文章目录 前言1、技术复杂性与成熟度 / Technical Complexity and Maturity2.、应用场景与行业需求 / Application Scenarios and Industry Demand3、监管与法律问题 / Regulatory and Legal Issues4、去中心化与网络效应 / Decentralization and Network Effects5、能源消耗与…...

WordPress果果对象存储插件

将网站上的图片等静态资源文件上传至七牛云对象存储&#xff0c;可以减轻服务器文件存储压力&#xff0c;提升静态文件访问速度&#xff0c;从而加速网站访问速度。 支持&#xff1a;阿里云对象存储、华为云对象存储、百度云对象存储、腾讯云对象存储、七牛云对象存储。 下载…...

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预训练视觉和大语言模型

大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型&#xff0c;通常使用自监督学习方法通过大量无标签文本进行训练&#xff0c;是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…...

OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap&#xff08;使用单位矩阵 R…...

用 Java 发送 HTML 内容并带附件的电子邮件

实现思路 首先&#xff0c;设置邮件服务器的相关属性&#xff0c;包括是否需要认证、使用的邮件协议、服务器地址、端口等。 创建一个会话对象&#xff0c;使用 Session.getInstance 方法&#xff0c;并提供邮件服务器的属性和认证信息。 创建一个 MimeMessage 对象作为邮件消…...

【Day24 LeetCode】贪心Ⅱ

一、贪心Ⅱ 1、买卖股票的最佳时机 II 122 这题第一想法是使用动态规划做&#xff0c;每天有两个状态&#xff0c;持有股票和非持有股票&#xff0c;每次计算这两个状态下的最优值。 class Solution { public:int maxProfit(vector<int>& prices) {//表示当前 没有…...

vue3+elementPlus之后台管理系统(从0到1)(day3-管理员管理)

管理员管理 搭建管理员页面 在views中创建一个manager文件夹&#xff0c;并创建ManagerIndexView.vue、MangagerListView.vue、UserList.vue <!-- src/views/manager/ManagerIndexView.vue --> <template><!-- 作为一个占位符&#xff0c;用于渲染与当前 URL…...

上位机知识篇---ROS2命令行命令静态链接库动态链接库

文章目录 前言第一部分&#xff1a;ROS2命令行命令1. 基础命令&#xff08;1&#xff09;ros2 run&#xff08;2&#xff09;ros2 launch&#xff08;3&#xff09;ros2 node&#xff08;4&#xff09;ros2 topic&#xff08;5&#xff09;ros2 service&#xff08;6&#xff0…...

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…...

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?

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

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种&#xff1a;主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备&#xff0c;而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

模拟算法习题篇

在算法中&#xff0c;模拟是一种通过计算机程序来模拟现实世界中的过程或系统行为的方法。它的核心思想是根据题目给定的规则和逻辑&#xff0c;按照步骤细致地重现事件的发展流程&#xff0c;从而获得最终结果。 解题时如何使用模拟算法&#xff1a; 理解题目规则&#xff1a;…...

蓝桥杯真题 - 翻转 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3520/learning/ 个人评价&#xff1a;难度 1 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;无 整体思路 贪心&#xff0c;除了第一位跟最后一位&#xff0c;其它字符&#xff0c;每当 S [ i ] ≠…...

IP属地与视频定位位置不一致:现象解析与影响探讨

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

Lux编译器完整指南:如何将用户意图智能转化为可视化规范

Lux编译器完整指南&#xff1a;如何将用户意图智能转化为可视化规范 【免费下载链接】lux Automatically visualize your pandas dataframe via a single print! &#x1f4ca; &#x1f4a1; 项目地址: https://gitcode.com/gh_mirrors/lux/lux Lux编译器是Lux数据可视…...

盘点 | 2026顶会顶刊机器人触觉:聚焦五条技术主线

2026年顶会顶刊释放的五大「触觉」关键信号 ——从静态识别到动态闭环 目录 01 元学习赋能机器人触觉识别&#xff0c;精度与泛化性俱佳 ICRA2026 | Tactile Recognition of Both Shapes and Materials with Automatic Feature Optimization-Enabled Meta Learning 研究方…...

DownKyi跨平台存储管理指南:从问题诊断到云存储整合

DownKyi跨平台存储管理指南&#xff1a;从问题诊断到云存储整合 【免费下载链接】downkyicore 哔哩下载姬(跨平台版)downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去…...

影墨·今颜多模态应用:结合文本与图像输入的进阶生成案例

影墨今颜多模态应用&#xff1a;结合文本与图像输入的进阶生成案例 最近在玩一个挺有意思的模型&#xff0c;叫影墨今颜。它最吸引我的地方&#xff0c;不是单纯的文生图或者图生图&#xff0c;而是能把文字和图片“揉”在一起&#xff0c;生成一些意想不到的新东西。这感觉就…...

VSCode CLine插件深度配置:灵活切换OpenAI GPT与Claude 3.5模型进行智能编程

1. 为什么开发者需要多模型切换能力 在当今的AI辅助编程领域&#xff0c;OpenAI的GPT系列和Anthropic的Claude系列无疑是两大主流选择。我在实际项目中发现&#xff0c;不同模型在代码生成、错误修复和文档解释等方面各有千秋。比如GPT-4o擅长处理复杂算法逻辑&#xff0c;而Cl…...

轻量级大模型新选择:Gemma-3-270m在边缘设备部署的完整步骤详解

轻量级大模型新选择&#xff1a;Gemma-3-270m在边缘设备部署的完整步骤详解 1. 为什么选择Gemma-3-270m作为边缘设备首选 如果你正在寻找一个既轻量又强大的AI模型来部署在边缘设备上&#xff0c;Gemma-3-270m绝对值得考虑。这个模型只有2.7亿参数&#xff0c;却继承了Gemini…...

MAX30101嵌入式驱动开发:寄存器配置与PPG信号处理

1. MAX30101嵌入式驱动库深度解析&#xff1a;从寄存器级控制到心率血氧算法集成MAX30101是Maxim Integrated&#xff08;现为Analog Devices&#xff09;推出的高集成度光学生物传感器模块&#xff0c;专为可穿戴设备和便携式医疗监测系统设计。该芯片集成了绿光/红光/红外LED…...

效率提升秘籍:用快马AI一键生成智能书签与网址检索助手

最近在整理浏览器书签时&#xff0c;发现收藏夹已经乱成一团。每次想找个常用网站都得翻半天&#xff0c;更别提临时需要找新资源时的焦头烂额了。作为一个追求效率的程序员&#xff0c;我决定自己动手做个智能书签助手&#xff0c;没想到在InsCode(快马)平台上半小时就搞定了原…...

Docker镜像与容器操作全攻略

❤️一&#xff1a;镜像&#xff1a;把镜像保存为文件&#xff08;可放到其他虚拟机中运行&#xff09;&#xff1a; docker save -o centos-7.5-1804.tar&#xff08;保存的文件名&#xff09; centos:7.5.1804&#xff08;仓库:标签&#xff09;将镜像文件加载到本地镜像库&a…...

tchMaterial-parser:开源教育工具助力电子教材高效获取

tchMaterial-parser&#xff1a;开源教育工具助力电子教材高效获取 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 项目地址…...