Site updated: 2024-01-07 00:20:24

This commit is contained in:
qinglong committed 2024-01-07 00:20:28 +08:00
1 parent d3fe637d72
commit 2819cb9914
205 files changed
+350 -345

No files matched your search

+3 -141
View File
@@ -1,141 +1,3 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AES Encryption</title>
<style>
input[type="text"] {
width: 100%;
height: 30px;
margin-top: 0px;
margin-bottom: 20px;
}
input {
margin-top: 20px;
}
</style>
<script src="./crypto-js.min.js"></script>
</head>
<body>
信息:<input type="text" id="content" /><br>
秘钥:<input type="text" id="encryptionKey" /><br>
是否使用IV向量:<input type="radio" id="useIv" value=0 checked onclick="selectUseIv(this.value)" />否&emsp;
<input type="radio" id="useIv" value=1 onclick="selectUseIv(this.value)" />是<br>
IV向量:<input type="text" id="iv" /><br>
NoPadding:<input type="radio" id="useNoPadding" value=0 checked onclick="selectUseNoPadding(this.value)" />否&emsp;
<input type="radio" id="useNoPadding" value=1 onclick="selectUseNoPadding(this.value)" />是<br>
加密结果:<input type="text" id="value1" /><br>
解密结果:<input type="text" id="value2" /><br>
<input type="button" value="提交" onclick="submit()" />
<script>
// 默认信息
document.getElementById("content").value = '{"endTime": "", "keyword": "", "magnitude": "", "pageNum": 1, "pageSize": 10, "startTime": "", "xzqh": "420"}';
// 默认aes秘钥
document.getElementById("encryptionKey").value = "l5gzm2n78wriiqux";
// 加密函数
function encryptAES(text, key, conf) {
// 使用 CryptoJS.AES 对象进行加密
var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(text), CryptoJS.enc.Utf8.parse(key), conf);
return encrypted.toString();
}
// 解密函数
function decryptAES(encryptedText, key, conf) {
// 使用 CryptoJS.AES 对象进行解密
var decrypted = CryptoJS.AES.decrypt(encryptedText, CryptoJS.enc.Utf8.parse(key), conf);
return decrypted.toString(CryptoJS.enc.Utf8);
}
// 提交
function submit() {
var encryptionKey = document.getElementById("encryptionKey").value;
// 模式ECB、CBC
// 补码Pkcs7、NoPadding
var conf = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
// 是否使用NoPadding
var useNoPadding = false;
if (document.querySelector('input[id="useNoPadding"]:checked').value == 1) {
useNoPadding = true;
}
// 判断是否使用iv向量
if (document.querySelector('input[id="useIv"]:checked').value == 1) {
conf.mode = CryptoJS.mode.CBC;
if (useNoPadding) {
conf.padding = CryptoJS.pad.NoPadding;
}
var iv = document.getElementById("iv").value;
if (!iv) {
selectUseIv(1);
iv = document.getElementById("iv").value;
}
if (iv.length != 16) {
alert("iv的长度必须是16位");
return;
}
conf.iv = CryptoJS.enc.Utf8.parse(document.getElementById("iv").value);
}
// 加密
var text = document.getElementById("content").value;
if (useNoPadding) {
const blockSize = 16; // AES块大小为16字节
text = padToBlockSize(text, blockSize);
}
if (!text) {
alert("信息不能为空");
return;
}
document.getElementById("value1").value = encryptAES(text, encryptionKey, conf);
// 解密
var decryptText = decryptAES(document.getElementById("value1").value, encryptionKey, conf);
if (useNoPadding) {
decryptText = removePadding(decryptText);
}
document.getElementById("value2").value = decryptText;
}
// 选择是否使用iv向量
function selectUseIv(value) {
if (value == 1) {
document.querySelector('input[id="useIv"][value="0"]').checked = false;
if (!document.getElementById("iv").value) {
var randomBytes = CryptoJS.lib.WordArray.random(128 / 8);
var randomHexString = randomBytes.toString(CryptoJS.enc.Hex);
document.getElementById("iv").value = randomHexString.substring(0, 16);
}
} else {
document.querySelector('input[id="useIv"][value="1"]').checked = false;
document.getElementById("iv").value = "";
}
}
// 选择是否使用NoPadding
function selectUseNoPadding(value) {
if (value == 1) {
document.querySelector('input[id="useNoPadding"][value="0"]').checked = false;
} else {
document.querySelector('input[id="useNoPadding"][value="1"]').checked = false;
}
}
// 确保明文长度是块大小的整数倍
function padToBlockSize(data, blockSize) {
const paddingLength = blockSize - (data.length % blockSize);
const padding = String.fromCharCode(paddingLength).repeat(paddingLength);
return data + padding;
}
// 去除填充
function removePadding(plaintext) {
const paddingLength = plaintext.charCodeAt(plaintext.length - 1);
return plaintext.slice(0, -paddingLength);
}
</script>
</body>
</html>
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=2"><meta name="theme-color" content="#FFF"><link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon.png"><link rel="icon" type="image/ico" sizes="32x32" href="/images/favicon.ico"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><link rel="alternate" type="application/rss+xml" title="涛声依旧" href="https://hitoli.com/rss.xml"><link rel="alternate" type="application/atom+xml" title="涛声依旧" href="https://hitoli.com/atom.xml"><link rel="alternate" type="application/json" title="涛声依旧" href="https://hitoli.com/feed.json"><link rel="stylesheet" href="//fonts.googleapis.com/css?family=Mulish:300,300italic,400,400italic,700,700italic%7CFredericka%20the%20Great:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20JP:300,300italic,400,400italic,700,700italic%7CNoto%20Serif%20SC:300,300italic,400,400italic,700,700italic%7CInconsolata:300,300italic,400,400italic,700,700italic&display=swap&subset=latin,latin-ext"><link rel="stylesheet" href="/css/app.css?v=0.0.0"><link rel="canonical" href="https://hitoli.com/tags/"><title>AES加解密 | ☆∵∴Hito∴∵★ = 涛声依旧 = 天下事有难易乎?为之,则难者亦易矣</title><meta name="generator" content="Hexo 6.3.0"></head><body itemscope itemtype="http://schema.org/WebPage"><div id="loading"><div class="cat"><div class="body"></div><div class="head"><div class="face"></div></div><div class="foot"><div class="tummy-end"></div><div class="bottom"></div><div class="legs left"></div><div class="legs right"></div></div><div class="paw"><div class="hands left"></div><div class="hands right"></div></div></div></div><div id="container"><header id="header" itemscope itemtype="http://schema.org/WPHeader"><div class="inner"><div id="brand"></div><nav id="nav"><div class="inner"><div class="toggle"><div class="lines" aria-label="切换导航栏"><span class="line"></span> <span class="line"></span> <span class="line"></span></div></div><ul class="menu"><li class="item title"><a href="/" rel="start">☆∵∴Hito∴∵★</a></li></ul><ul class="right"><li class="item theme"><i class="ic i-sun"></i></li><li class="item search"><i class="ic i-search"></i></li></ul></div></nav></div><div id="imgs" class="pjax"><ul><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1giclx6phq6j20zk0m8e36.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipeun65urj20zk0m81ii.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipew28b65j20zk0m8hdt.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipeuibk9fj20zk0m8ay2.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipeu1usa7j20zk0m8b29.jpg"></li><li class="item" data-background-image="https://nas.hitoli.com:18014/images/2022/10/29/6833939bly1gipeybxm1pj20zk0m8niv.jpg"></li></ul></div></header><div id="waves"><svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto"><defs><path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z"/></defs><g class="parallax"><use xlink:href="#gentle-wave" x="48" y="0"/><use xlink:href="#gentle-wave" x="48" y="3"/><use xlink:href="#gentle-wave" x="48" y="5"/><use xlink:href="#gentle-wave" x="48" y="7"/></g></svg></div><main><div class="inner"><div id="main" class="pjax"><div class="tools wrap"><div class="breadcrumb" itemscope="" itemtype="https://schema.org/BreadcrumbList"><i class="ic i-home"></i> <span><a href="/" data-pjax-state="">首页</a></span><i class="ic i-angle-right"></i> <span itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem"><a href="/tools/" itemprop="item" rel="index" title="工具" data-pjax-state=""><span itemprop="name">工具</span></a><meta itemprop="position" content="1"></span><i class="ic i-angle-right"></i> <span class="current" itemprop="itemListElement" itemscope="" itemtype="https://schema.org/ListItem"><a href="/tools/aes/" itemprop="item" rel="index" title="AES加解密" data-pjax-state=""><span itemprop="name">AES加解密</span></a><meta itemprop="position" content="2"></span></div><div class="tools cloud">
<iframe src="/tools/aes/tool.html" width="100%" height="800" frameborder="0"></iframe>
</div></div></div><div id="sidebar"><div class="inner"><div class="panels"><div class="inner"><div class="contents panel pjax" data-title="文章目录"></div><div class="related panel pjax" data-title="系列文章"></div><div class="overview panel" data-title="站点概览"><div class="author" itemprop="author" itemscope itemtype="http://schema.org/Person"><img class="image" itemprop="image" alt="Hito Li" data-src="/images/avatar.jpg"><p class="name" itemprop="name">Hito Li</p><div class="description" itemprop="description">天生我材必有用</div></div><nav class="state"><div class="item posts"><a href="/archives/"><span class="count">54</span> <span class="name">文章</span></a></div><div class="item categories"><a href="/categories/"><span class="count">22</span> <span class="name">分类</span></a></div><div class="item tags"><a href="/tags/"><span class="count">92</span> <span class="name">标签</span></a></div></nav><div class="social"><span class="exturl item weibo" data-url="aHR0cHM6Ly93ZWliby5jb20vdS8xMDYxNDYwNzQ1" title="https:&#x2F;&#x2F;weibo.com&#x2F;u&#x2F;1061460745"><i class="ic i-weibo"></i></span> <span class="exturl item douban" data-url="aHR0cHM6Ly93d3cuZG91YmFuLmNvbS9wZW9wbGUvMjU5Mzc2NTY0" title="https:&#x2F;&#x2F;www.douban.com&#x2F;people&#x2F;259376564"><i class="ic i-douban"></i></span> <span class="exturl item music" data-url="aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvdXNlci9ob21lP2lkPTEwNTQ2NzQ2Mw==" title="https:&#x2F;&#x2F;music.163.com&#x2F;#&#x2F;user&#x2F;home?id&#x3D;105467463"><i class="ic i-cloud-music"></i></span> <a href="/about/me" title="about&#x2F;me" class="item about"><i class="ic i-address-card"></i></a></div><ul class="menu"><li class="item"><a href="/" rel="section"><i class="ic i-home"></i>首页</a></li><li class="item"><a href="/about/me" rel="section"><i class="ic i-user"></i>关于</a></li><li class="item dropdown"><a href="javascript:void(0);"><i class="ic i-feather"></i>文章</a><ul class="submenu"><li class="item"><a href="/archives/" rel="section"><i class="ic i-list-alt"></i>归档</a></li><li class="item"><a href="/categories/" rel="section"><i class="ic i-th"></i>分类</a></li><li class="item"><a href="/tags/" rel="section"><i class="ic i-tags"></i>标签</a></li></ul></li><li class="item"><a href="/tools/" rel="section"><i class="ic i-magic"></i>工具</a></li><li class="item"><span class="exturl" data-url="aHR0cHM6Ly93d3cuZm9yZXZlcmJsb2cuY24vZ28uaHRtbA=="><i class="ic i-paper-plane"></i>虫洞</span></li></ul></div></div></div><ul id="quick"><li class="prev pjax"></li><li class="up"><i class="ic i-arrow-up"></i></li><li class="down"><i class="ic i-arrow-down"></i></li><li class="next pjax"></li><li class="percent"></li></ul></div></div><div class="dimmer"></div></div></main><footer id="footer"><div class="inner"><div class="widgets"><div class="rpost pjax"><h2>随机文章</h2><ul><li class="item"><div class="breadcrumb"><a href="/categories/%E5%B7%A5%E4%BD%9C/" title="分类于 工作">工作</a> <i class="ic i-angle-right"></i> <a href="/categories/%E5%B7%A5%E4%BD%9C/KLineChart/" title="分类于 KLineChart">KLineChart</a></div><span><a href="/2023/01/31/KLineChart%E7%94%BB%E6%B3%A2%E6%AE%B5%E9%AB%98%E4%BD%8E%E4%BB%B7%E5%9B%BE/" title="KLineChart画波段高低价图">KLineChart画波段高低价图</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/%E5%B7%A5%E4%BD%9C/" title="分类于 工作">工作</a> <i class="ic i-angle-right"></i> <a href="/categories/%E5%B7%A5%E4%BD%9C/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98/" title="分类于 解决问题">解决问题</a></div><span><a href="/2024/01/03/Centos7%E7%BC%96%E8%AF%91%E5%8D%87%E7%BA%A7nginx/" title="Centos7编译升级nginx">Centos7编译升级nginx</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Linux/" title="分类于 Linux">Linux</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/" title="分类于 服务">服务</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" title="分类于 Nginx">Nginx</a></div><span><a href="/2022/11/08/Nginx%E9%85%8D%E7%BD%AE-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/" title="Nginx配置-反向代理">Nginx配置-反向代理</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/Linux/" title="分类于 Linux">Linux</a> <i class="ic i-angle-right"></i> <a href="/categories/Linux/Centos/" title="分类于 Centos">Centos</a></div><span><a href="/2023/10/28/Centos%E6%8C%82%E8%BD%BD%E6%96%B0%E7%A1%AC%E7%9B%98/" title="Centos挂载新硬盘">Centos挂载新硬盘</a></span></li><li class="item"><div class="breadcrumb"><a href="/categories/%E5%B7%A5%E4%BD%9C/" title="分类于 工作">工作</a> <i class="ic i-angle-right"></i> <a href="/categories/%E5%B7%A5%E4%BD%9C/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98/" title="分类于 解决问题">解决问题</a></div><span><a href="/2023/05/25/MySQL%E4%B8%AD%E7%9A%84any-value-%E5%87%BD%E6%9Line truncated
+141
View File
@@ -0,0 +1,141 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AES Encryption</title>
<style>
input[type="text"] {
width: 100%;
height: 30px;
margin-top: 0px;
margin-bottom: 20px;
}
input {
margin-top: 20px;
}
</style>
<script src="./crypto-js.min.js"></script>
</head>
<body>
信息:<input type="text" id="content" /><br>
秘钥:<input type="text" id="encryptionKey" /><br>
是否使用IV向量:<input type="radio" id="useIv" value=0 checked onclick="selectUseIv(this.value)" />否&emsp;
<input type="radio" id="useIv" value=1 onclick="selectUseIv(this.value)" />是<br>
IV向量:<input type="text" id="iv" /><br>
NoPadding:<input type="radio" id="useNoPadding" value=0 checked onclick="selectUseNoPadding(this.value)" />否&emsp;
<input type="radio" id="useNoPadding" value=1 onclick="selectUseNoPadding(this.value)" />是<br>
加密结果:<input type="text" id="value1" /><br>
解密结果:<input type="text" id="value2" /><br>
<input type="button" value="提交" onclick="submit()" />
<script>
// 默认信息
document.getElementById("content").value = '{"endTime": "", "keyword": "", "magnitude": "", "pageNum": 1, "pageSize": 10, "startTime": "", "xzqh": "420"}';
// 默认aes秘钥
document.getElementById("encryptionKey").value = "l5gzm2n78wriiqux";
// 加密函数
function encryptAES(text, key, conf) {
// 使用 CryptoJS.AES 对象进行加密
var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(text), CryptoJS.enc.Utf8.parse(key), conf);
return encrypted.toString();
}
// 解密函数
function decryptAES(encryptedText, key, conf) {
// 使用 CryptoJS.AES 对象进行解密
var decrypted = CryptoJS.AES.decrypt(encryptedText, CryptoJS.enc.Utf8.parse(key), conf);
return decrypted.toString(CryptoJS.enc.Utf8);
}
// 提交
function submit() {
var encryptionKey = document.getElementById("encryptionKey").value;
// 模式ECB、CBC
// 补码Pkcs7、NoPadding
var conf = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
// 是否使用NoPadding
var useNoPadding = false;
if (document.querySelector('input[id="useNoPadding"]:checked').value == 1) {
useNoPadding = true;
}
// 判断是否使用iv向量
if (document.querySelector('input[id="useIv"]:checked').value == 1) {
conf.mode = CryptoJS.mode.CBC;
if (useNoPadding) {
conf.padding = CryptoJS.pad.NoPadding;
}
var iv = document.getElementById("iv").value;
if (!iv) {
selectUseIv(1);
iv = document.getElementById("iv").value;
}
if (iv.length != 16) {
alert("iv的长度必须是16位");
return;
}
conf.iv = CryptoJS.enc.Utf8.parse(document.getElementById("iv").value);
}
// 加密
var text = document.getElementById("content").value;
if (useNoPadding) {
const blockSize = 16; // AES块大小为16字节
text = padToBlockSize(text, blockSize);
}
if (!text) {
alert("信息不能为空");
return;
}
document.getElementById("value1").value = encryptAES(text, encryptionKey, conf);
// 解密
var decryptText = decryptAES(document.getElementById("value1").value, encryptionKey, conf);
if (useNoPadding) {
decryptText = removePadding(decryptText);
}
document.getElementById("value2").value = decryptText;
}
// 选择是否使用iv向量
function selectUseIv(value) {
if (value == 1) {
document.querySelector('input[id="useIv"][value="0"]').checked = false;
if (!document.getElementById("iv").value) {
var randomBytes = CryptoJS.lib.WordArray.random(128 / 8);
var randomHexString = randomBytes.toString(CryptoJS.enc.Hex);
document.getElementById("iv").value = randomHexString.substring(0, 16);
}
} else {
document.querySelector('input[id="useIv"][value="1"]').checked = false;
document.getElementById("iv").value = "";
}
}
// 选择是否使用NoPadding
function selectUseNoPadding(value) {
if (value == 1) {
document.querySelector('input[id="useNoPadding"][value="0"]').checked = false;
} else {
document.querySelector('input[id="useNoPadding"][value="1"]').checked = false;
}
}
// 确保明文长度是块大小的整数倍
function padToBlockSize(data, blockSize) {
const paddingLength = blockSize - (data.length % blockSize);
const padding = String.fromCharCode(paddingLength).repeat(paddingLength);
return data + padding;
}
// 去除填充
function removePadding(plaintext) {
const paddingLength = plaintext.charCodeAt(plaintext.length - 1);
return plaintext.slice(0, -paddingLength);
}
</script>
</body>
</html>