AES 加解密(包含JS、VUE、JAVA、MySQL)工具方法

介绍

AES 是 Advanced Encryption Standard 的缩写,是最常见的对称加密算法。AES 在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。

基本原理:AES 的加密公式为 C=E(K,P),其中 K 为密钥,P 为明文,C 为密文。

加密流程图:
在这里插入图片描述

封装工具方法

JS 工具方法

// 引入依赖
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>// 加密方法
function encrypt(content, key) {return CryptoJS.AES.encrypt(content, CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).ciphertext.toString();
}// 解密方法
function decrypt(content, key) {return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(content)), CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
}

例子:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script><script>var key = "xxxxxxxxxxxxxxxx";function encryptText() {var plain = document.getElementById("plain").value;var encrypted = encrypt(plain, key);document.getElementById("encrypted").value = encrypted;}function decryptText() {var encrypted = document.getElementById("todecrypt").value;var decrypted = decrypt(encrypted, key);document.getElementById("decrypted").value = decrypted;}// 加密方法function encrypt(content, key) {return CryptoJS.AES.encrypt(content, CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).ciphertext.toString();}// 解密方法function decrypt(content, key) {return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(content)), CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);}</script>
</head>
<body><h2>加解密测试</h2><div  style="padding: 1rem 0"><input id="plain" type="text" /><button type="button" onclick="encryptText()">加密</button><input id="encrypted" type="text"/></div><div><input id="todecrypt" type="text"/><button type="button" onclick="decryptText()">解密</button><input id="decrypted" type="text"/></div>
</body>
</html>

VUE 工具方法

// 添加依赖
npm install crypto-js// 加密方法
function onEncrypt(content: any, key: any) {return CryptoJS.AES.encrypt(content, CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7,}).ciphertext.toString().toUpperCase();
}// 解密方法
function onDecrypt(content: any, key: any) {return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(content)), CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7,}).toString(CryptoJS.enc.Utf8);
}

例子:

<script setup lang="ts">
import { onMounted, reactive, toRefs } from "vue";
import CryptoJS from "crypto-js";const state = reactive({key: "xxxxxxxxxxxxxxxx",plain: null,encrypted: null,todecrypt: null,decrypted: null
})
const {key,plain,encrypted,todecrypt,decrypted} = toRefs(state)function encryptText() {state.encrypted = onEncrypt(state.plain, state.key);
}function decryptText() {state.decrypted = onDecrypt(state.todecrypt, state.key);
}// 加密方法
function onEncrypt(content: any, key: any) {return CryptoJS.AES.encrypt(content, CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7,}).ciphertext.toString().toUpperCase();
}// 解密方法
function onDecrypt(content: any, key: any) {return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(content)), CryptoJS.enc.Utf8.parse(key), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7,}).toString(CryptoJS.enc.Utf8);
}
</script>
<template><div class="aes"><h1>AES加解密</h1><el-row :gutter="20" style="padding: 1rem 0"><el-col :span="6"><el-input v-model="plain" placeholder="请输入内容"></el-input></el-col><el-col :span="2"><el-button type="primary" @click="encryptText()">加密</el-button></el-col><el-col :span="12"><div>{{state.encrypted}}</div></el-col></el-row><el-row :gutter="20"><el-col :span="6"><el-input v-model="todecrypt" placeholder="请输入内容"></el-input></el-col><el-col :span="2"><el-button type="primary" @click="decryptText()">解密</el-button></el-col><el-col :span="12"><div>{{state.decrypted}}</div></el-col></el-row></div>
</template>
<style lang="scss" scoped>
.aes {text-align: center;
}
</style>

JAVA 工具类

package com.tansci.util;import org.apache.commons.codec.binary.Hex;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;/*** @ClassName: AESUtil.java* @ClassPath: com.tansci.util.AESUtil.java* @Description: AES对称加解密工具类* @Author: tanyp* @Date: 2024/4/18 12:00**/
public class AESUtil {/*** @MonthName: encrypt* @Description: 加密* @Author: tanyp* @Date: 2024/4/18 12:00* @Param: [content, key: 16位]* @return: java.lang.String**/public static String encrypt(String content, String key) throws Exception {KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128);Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));byte[] b = cipher.doFinal(content.getBytes("utf-8"));return Hex.encodeHexString(b);}/*** @MonthName: decrypt* @Description: 解密* @Author: tanyp* @Date: 2024/4/18 12:00* @Param: [encryptStr, key:16位]* @return: java.lang.String**/public static String decrypt(String encryptStr, String key) throws Exception {KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128);Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));byte[] encrypttBytes = Hex.decodeHex(encryptStr);byte[] decryptBytes = cipher.doFinal(encrypttBytes);return new String(decryptBytes);}}

MYSQL 使用方法

-- 加密 
select HEX(AES_ENCRYPT('admin','xxxxxxxxxxxxxxxx'))-- 解密  
select CONVERT(AES_DECRYPT(UNHEX('305e188e6818582f8298551e4b50702a'),'xxxxxxxxxxxxxxxx') USING UTF8MB4)
select AES_DECRYPT(UNHEX('4C80D7BE4719ED572565378025E7AC85'),'xxxxxxxxxxxxxxxx')

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

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

相关文章

python 使用 Stable Diffusion API 生成图片示例

python 使用 Stable Diffusion API 生成图片示例 一、前言 在无聊的时候&#xff0c;想瞅一下sd生图遂做了一下 二、具体步骤 1、启动SD的api设置 注意&#xff0c;运行后的api相关功能可以在:http://127.0.0.1:7860/docs 查看 比如这一次我们要的生图的地址就是/sdapi/v1…

华为OD机试 - 结队编程(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

户外旅行摄影手册,旅游摄影完全攻略

一、资料前言 本套旅游摄影资料&#xff0c;大小295.47M&#xff0c;共有9个文件。 二、资料目录 《川藏线旅游摄影》杨桦.彩印版.pdf 《户外摄影指南》(Essential.Guide.to.Outdoor.photography.amateur)影印版.pdf 《旅行摄影大师班》(英)科尼什.扫描版.PDF 《旅行摄影…

数据结构面试常见问题:数组和链表的区别是什么?

数组 在编程的世界里&#xff0c;数组无疑是最基础的数据结构之一&#xff0c;它像一排整齐的房子&#xff0c;每个房子都有自己的门牌号&#xff0c;我们可以通过这个门牌号直接找到这个房子&#xff0c;无需从头至尾的逐一查找。这个门牌号&#xff0c;就是我们所说的索引&am…

一键下载全自动安装Office全家桶

概述 今天分享一款超级强大的工具软件&#xff0c;该软件实现了一键自动化下载、安装Office全家桶的功能。整套安装流程堪称行云流水&#xff0c;从下载到安装全自动&#xff0c;无需上手操作。只需要安装该工具软件后&#xff0c;点击安装即可。软件会自动识别不同的操作系统架…

Oracle——领先的企业级数据库解决方案

一、WHAT IS ORACLWE&#xff1a; ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或B/S 体系结构的数据库之一&#xff0c;ORACLE 通常应用于大型系统的数…

【计算机毕业设计】微信小程序:MHK自学平台的设计与实现——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

MajorDoMo thumb.php 未授权RCE漏洞复现(CNVD-2024-02175)

0x01 产品简介 MajorDoMo是MajorDoMo社区的一个开源DIY智能家居自动化平台。 0x02 漏洞概述 MajorDoMo /modules/thumb/thumb.php接口处存在远程命令执行漏洞&#xff0c;未经身份验证的攻击者可利用此漏洞执行任意指令&#xff0c;获取服务器权限。 0x03 影响范围 MajorD…

ARM64架构栈帧回溯

文章目录 前言一、栈帧简介二、demo演示 前言 请参考&#xff1a;ARM64架构栈帧以及帧指针FP 一、栈帧简介 假设下列函数调用&#xff1a; funb() {func() }funa() {funb() }main() {funa() }main函数&#xff0c;funa函数&#xff0c;funb函数都不是叶子函数&#xff0c;其…

MySQL 的事务概念

事务概念 MySQL事务是一个或者多个的数据库操作&#xff0c;要么全部执行成功&#xff0c;要么全部失败回滚。 事务是通过事务日志来实现的&#xff0c;事务日志包括&#xff1a;redo log和undo log。 事务状态 事务有以下五种状态&#xff1a; 活动的部分提交的失败的中止的…

详解爬虫基本知识及入门案列(爬取豆瓣电影《热辣滚烫》的短评 详细讲解代码实现)

目录 前言什么是爬虫&#xff1f; 爬虫与反爬虫基础知识 一、网页基础知识 二、网络传输协议 HTTP&#xff08;HyperText Transfer Protocol&#xff09;和HTTPS&#xff08;HTTP Secure&#xff09;请求过程的原理&#xff1f; 三、Session和Cookies Session Cookies Session与…

股权融资成本GLS模型计算

一、模型公式 式中&#xff1a; r 为股权融资成本 P为股价 B为每股净资产 FROE为预测每股净资产收益率 目标&#xff1a;求解股权融资成本r 二、模型口径参考来源 PS&#xff1a;实际以代码为准 ①FROE&#xff08;预测每股净资产收益率&#xff09;: 资本市场开放与…

“R+遥感”的水环境综合评价方法实践技术应用

张博士&#xff0c;来自重点高校及科研院所一线科研人员&#xff0c;长期从事机器学习、遥感技术与应用研究&#xff0c;主持多项国家级科研项目&#xff0c;编写著作3部&#xff0c;第一作者发表科研论文20余篇。对国内外遥感技术的多平台、多传感器应用现状&#xff0c;以及涉…

【leetcode面试经典150题】59. 合并两个有序链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

Elasticsearch:简化 KNN 搜索

作者&#xff1a;来自 Elastic Panagiotis Bailis 在这篇博客文章中&#xff0c;我们将深入探讨我们为了使 KNN 搜索的入门体验变得更加简单而做出的努力&#xff01; 向量搜索 向量搜索通过在 Elasticsearch 中引入一种新的专有的 KNN 搜索类型&#xff0c;已经可以使用一段…

【粉丝福利 | 第5期】教你快速入门三大层次学习企业架构框架TOGAF

⛳️ 写在前面参与规则&#xff01;&#xff01;&#xff01; ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09; ⛳️本次送书1~4本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越多】 三大层次学习…

如何取消电脑屏幕保护?学会这3招,操作无难度!

“我之前在电脑上设置了电脑屏幕保护&#xff0c;现在想将它取消掉&#xff0c;大家有什么比较好的方法可以分享一下吗&#xff1f;” 在日常使用电脑的过程中&#xff0c;屏幕保护程序是一个常见的功能。它可以在电脑空闲一段时间后自动启动&#xff0c;以动画或图片的形式展示…

玄子Share-网络布线与数制转换

玄子Share-网络布线与数制转换 网络传输介质 信号概述 什么是信号 信息数据信号 信号的分类 模拟信号数字信号 信号在传输过程中产生的失真 噪声距离速度 数字信号的优势 抗干扰能力强传输距离远并能保证质量 双绞线 双绞线 总共8根双绞线&#xff0c;两两绞合在一起常用…

C语言—常用字符串函数剖析

字符串函数 cplusplus.com/reference/cstring/ 更多没有总结到的函数大家可以自行查阅 这篇文章只是把最需要知道的函数做一个总结 strlen size_t strlen ( const char * str );字符串已经 ‘\0’ 作为结束标志&#xff0c;strlen函数返回的是在字符串中 ‘\0’ 前面出现的…

软考 - 系统架构设计师 - 架构风格例题

问题一&#xff1a; 什么是软件架构风格&#xff1f; 软件架构风格指特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式。惯用模式反映了众多系统所共有的结构和语义。 集成开发环境与用户的交互方式 &#xff08;实际上询问在交互方面&am…