Initial commit

This commit is contained in:
net909
2023-09-28 16:21:06 +08:00
parent 498772eb04
commit ba7be004c0
640 changed files with 87745 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* base64编码/解码
*/
namespace plugin\dev\base64;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+85
View File
@@ -0,0 +1,85 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">base64编码/解码</span>
</div>
<div class="form-group">
<label class="form-label" for=input">字符串</label>
<div class="form-control-wrap">
<textarea class="form-control" id="input" rows="8" placeholder="需要编码/解码的字符串"></textarea>
</div>
</div>
<div class="row pt-1 pb-1">
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="encode()">
<em class="icon ni ni-lock"></em>编码
</button>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="decode()">
<em class="icon ni ni-unlock"></em>解码
</button>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="exchange()">
<em class="icon ni ni-exchange-v"></em>交换
</button>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="reset()">
<em class="icon ni ni-reload"></em>清空
</button>
</div>
</div>
<div class="form-group mt-3">
<label class="form-label" for="output">结果</label>
<div class="form-control-wrap">
<textarea class="form-control" id="output" rows="8" placeholder="base64编码/解码的结果"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}crypto-js/4.1.1/crypto-js.min.js"></script>
<script>
function encode() {
var input = $("#input").val();
try {
const wordArray = CryptoJS.enc.Utf8.parse(input);
var output = CryptoJS.enc.Base64.stringify(wordArray);
$("#output").val(output);
} catch (e) {
layer.msg(e.message, {icon:2});
$("#output").val('');
}
}
function decode() {
var input = $("#input").val();
try {
output = CryptoJS.enc.Base64.parse(input).toString(CryptoJS.enc.Utf8);
$("#output").val(output);
} catch (e) {
layer.msg(e.message, {icon:2});
$("#output").val('');
}
}
function exchange() {
var input = $("#input").val();
var output = $("#output").val();
$("#input").val(output);
$("#output").val(input);
}
function reset() {
$("#input").val('');
$("#output").val('');
}
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* 字节计算器
*/
namespace plugin\dev\byte_calc;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+110
View File
@@ -0,0 +1,110 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<style>
.form-group{margin-bottom: 1rem;}
</style>
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">字节计算器</span>
</div>
<div class="form-group">
<label class="form-label" for="set.bit">bit (b)</label>
<div class="form-control-wrap">
<input v-model="set.bit" id="set.bit" type="number" placeholder="bit (b)" class="form-control form-control-lg">
</div>
</div>
<div class="form-group">
<label class="form-label" for="set.byte">byte (B)</label>
<div class="form-control-wrap">
<input v-model="set.byte" id="set.byte" type="number" placeholder="byte (B)" class="form-control form-control-lg">
</div>
</div>
<div class="form-group">
<label class="form-label" for="set.kilobyte">kilobyte (KB)</label>
<div class="form-control-wrap">
<input v-model="set.kilobyte" id="set.kilobyte" type="number" placeholder="kilobyte (KB)" class="form-control form-control-lg">
</div>
</div>
<div class="form-group">
<label class="form-label" for="set.megabyte">megabyte (MB)</label>
<div class="form-control-wrap">
<input v-model="set.megabyte" id="set.megabyte" type="number" placeholder="megabyte (MB)" class="form-control form-control-lg">
</div>
</div>
<div class="form-group">
<label class="form-label" for="set.gigabyte">gigabyte (GB)</label>
<div class="form-control-wrap">
<input v-model="set.gigabyte" id="set.gigabyte" type="number" placeholder="gigabyte (GB)" class="form-control form-control-lg">
</div>
</div>
<div class="form-group">
<label class="form-label" for="set.terabyte">terabyte (TB)</label>
<div class="form-control-wrap">
<input v-model="set.terabyte" id="set.terabyte" type="number" placeholder="terabyte (TB)" class="form-control form-control-lg">
</div>
</div>
<div class="form-group">
<label class="form-label" for="set.petabyte">petabyte (PB)</label>
<div class="form-control-wrap">
<input v-model="set.petabyte" id="set.petabyte" type="number" placeholder="petabyte (PB)" class="form-control form-control-lg">
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
set: {
bit: '',
byte: '',
kilobyte: '',
megabyte: '',
gigabyte: '',
terabyte: '',
petabyte: '',
},
},
watch: {
'set.bit'(newVal) {
this.set.byte = newVal / 8
},
'set.byte'(newVal) {
this.set.bit = newVal * 8
this.set.kilobyte = newVal / 1024
this.set.megabyte = newVal / 1024 / 1024
this.set.gigabyte = newVal / 1024 / 1024 / 1024
this.set.terabyte = newVal / 1024 / 1024 / 1024 / 1024
this.set.petabyte = newVal / 1024 / 1024 / 1024 / 1024 / 1024
},
'set.kilobyte'(newVal) {
this.set.byte = newVal * 1024
},
'set.megabyte'(newVal) {
this.set.byte = newVal * 1024 * 1024
},
'set.gigabyte'(newVal) {
this.set.byte = newVal * 1024 * 1024 * 1024
},
'set.terabyte'(newVal) {
this.set.byte = newVal * 1024 * 1024 * 1024 * 1024
},
'set.petabyte'(newVal) {
this.set.byte = newVal * 1024 * 1024 * 1024 * 1024 * 1024
},
},
created() {
},
methods: {},
})
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* CSS 格式化/压缩
*/
namespace plugin\dev\code_css;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+72
View File
@@ -0,0 +1,72 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="head"}
<link rel="stylesheet" href="{$cdn_npm}[email protected]/lib/codemirror.css">
<link rel="stylesheet" href="{$cdn_npm}[email protected]/theme/mdn-like.css">
<script src="{$cdn_npm}[email protected]/lib/codemirror.js"></script>
<script src="{$cdn_npm}[email protected]/js/lib/beautifier.min.js"></script>
<script src="{$cdn_npm}[email protected]/dist/csso.js"></script>
<script src="{$cdn_npm}[email protected]/mode/css/css.js"></script>
{/block}
{block name="main"}
<div class="container-xl">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">CSS 格式化/压缩</span>
</div>
<div class="form-group">
<label class="form-label">代码:</label>
<div class="form-control-wrap">
<textarea id="code" class="textarea textarea-bordered "></textarea>
</div>
</div>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="format()">
格式化
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="compress()">
压缩
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="reset()">
<em class="icon ni ni-reload"></em>
清空
</button>
</div>
</div>
</div>
{/block}
{block name="script"}
<script>
var defaultvalue = `body {
border: 1px solid #eee;
height: 100%;
color: #fff;
/*background-color: skyblue;*/
}`;
$("#code").html(defaultvalue);
var initcodemirror = CodeMirror.fromTextArea(document.getElementById("code"), { // 标识到textarea
value: defaultvalue, // 文本域默认显示的文本
mode: {name: "css"}, // 模式
theme: "mdn-like", // CSS样式选择
indentUnit: 2, // 缩进单位,默认2
smartIndent: true, // 是否智能缩进
tabSize: 4, // Tab缩进,默认4
readOnly: false, // 是否只读,默认false
showCursorWhenSelecting: true,
lineNumbers: true, // 是否显示行号
lineWrapping: true,
matchBrackets: true,
});
function format() {
initcodemirror.setValue(beautifier.css(initcodemirror.getValue()));
}
function compress() {
initcodemirror.setValue(csso.minify(initcodemirror.getValue()).css);
}
function reset() {
$("#code").val('');
initcodemirror.setValue('');
}
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* Html 格式化/加密/压缩
*/
namespace plugin\dev\code_html;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+108
View File
@@ -0,0 +1,108 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="head"}
<link rel="stylesheet" href="{$cdn_npm}[email protected]/lib/codemirror.css">
<link rel="stylesheet" href="{$cdn_npm}[email protected]/theme/mdn-like.css">
<script src="{$cdn_npm}[email protected]/lib/codemirror.js"></script>
<script src="{$cdn_npm}[email protected]/js/lib/beautifier.min.js"></script>
<script src="{$cdn_npm}[email protected]/mode/xml/xml.js"></script>
<script src="{$cdn_npm}[email protected]/mode/css/css.js"></script>
<script src="{$cdn_npm}[email protected]/mode/javascript/javascript.js"></script>
<script src="{$cdn_npm}[email protected]/mode/htmlmixed/htmlmixed.js"></script>
<script src="{$cdn_cdnjs}html-minifier/4.0.0/htmlminifier.min.js"></script>
{/block}
{block name="main"}
<div class="container-xl">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">Html 格式化/加密/压缩</span>
</div>
<div class="form-group">
<label class="form-label">代码:</label>
<div class="form-control-wrap">
<textarea id="code" class="textarea textarea-bordered "></textarea>
</div>
</div>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="format()">
格式化
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="compress()">
压缩
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="encode()">
加密
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="reset()">
<em class="icon ni ni-reload"></em>
清空
</button>
</div>
</div>
</div>
{/block}
{block name="script"}
<script>
var defaultvalue = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>
Hello World!
</h1>
</body>
</html>`;
const minify = require('html-minifier').minify;
$("#code").html(defaultvalue);
var initcodemirror = CodeMirror.fromTextArea(document.getElementById("code"), { // 标识到textarea
value: defaultvalue, // 文本域默认显示的文本
mode: {name: "htmlmixed"}, // 模式
theme: "mdn-like", // CSS样式选择
indentUnit: 2, // 缩进单位,默认2
smartIndent: true, // 是否智能缩进
tabSize: 4, // Tab缩进,默认4
readOnly: false, // 是否只读,默认false
showCursorWhenSelecting: true,
lineNumbers: true, // 是否显示行号
lineWrapping: true,
matchBrackets: true,
});
function format() {
initcodemirror.setValue(beautifier.html(initcodemirror.getValue()));
}
function compress() {
initcodemirror.setValue(minify(initcodemirror.getValue(), {
minifyCSS: true,
minifyJS: true,
removeComments: true,
collapseWhitespace: true,
decodeEntities: true,
trimCustomFragments: true,
}));
}
function encode(){
var minifyCode = minify(initcodemirror.getValue(), {
minifyCSS: true,
minifyJS: true,
removeComments: true,
collapseWhitespace: true,
decodeEntities: true,
trimCustomFragments: true,
})
var code = `<script>
document.write(decodeURIComponent("${encodeURIComponent(minifyCode)}"));
<\/script>`
initcodemirror.setValue(code);
}
function reset() {
$("#code").val('');
initcodemirror.setValue('');
}
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* JavaScript 格式化/混淆/压缩
*/
namespace plugin\dev\code_js;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+98
View File
@@ -0,0 +1,98 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="head"}
<link rel="stylesheet" href="{$cdn_npm}[email protected]/lib/codemirror.css">
<link rel="stylesheet" href="{$cdn_npm}[email protected]/theme/mdn-like.css">
<script src="{$cdn_npm}[email protected]/lib/codemirror.js"></script>
<script src="{$cdn_npm}[email protected]/js/lib/beautifier.min.js"></script>
<script src="{$cdn_npm}[email protected]/dist/bundle.min.js"></script>
<script src="{$cdn_npm}[email protected]/mode/javascript/javascript.js"></script>
{/block}
{block name="main"}
<div class="container-xl">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">JavaScript 格式化/混淆/压缩</span>
</div>
<div class="form-group">
<label class="form-label">代码:</label>
<div class="form-control-wrap">
<textarea id="code" class="textarea textarea-bordered "></textarea>
</div>
</div>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="format()">
格式化
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="compress()">
压缩
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="mix_up()">
混淆
</button>
<button class="btn btn-dim btn-outline-secondary card-link" onclick="reset()">
<em class="icon ni ni-reload"></em>
清空
</button>
</div>
</div>
</div>
{/block}
{block name="script"}
<script>
var defaultvalue = `new Vue({
el: '#app',
data: {
set: {
input: window.location.href,
output: '',
},
},
created() {
},
mounted() {
},
methods: {
},
})
`;
$("#code").html(defaultvalue);
var initcodemirror = CodeMirror.fromTextArea(document.getElementById("code"), { // 标识到textarea
value: defaultvalue, // 文本域默认显示的文本
mode: {name: "javascript", json: true}, // 模式
theme: "mdn-like", // CSS样式选择
indentUnit: 2, // 缩进单位,默认2
smartIndent: true, // 是否智能缩进
tabSize: 4, // Tab缩进,默认4
readOnly: false, // 是否只读,默认false
showCursorWhenSelecting: true,
lineNumbers: true, // 是否显示行号
lineWrapping: true,
matchBrackets: true,
});
function format() {
initcodemirror.setValue(beautifier.js(initcodemirror.getValue()));
}
function compress() {
Terser.minify(initcodemirror.getValue(), {
compress: true,
mangle: false,
}).then(res => {
initcodemirror.setValue(res.code);
})
}
function mix_up(){
Terser.minify(initcodemirror.getValue(), {
mangle: true,
compress: true,
}).then(res => {
initcodemirror.setValue(res.code);
})
}
function reset() {
$("#code").val('');
initcodemirror.setValue('');
}
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* 编码解码器
*/
namespace plugin\dev\decode;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+198
View File
@@ -0,0 +1,198 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">编码解码器</span>
</div>
<div class="form-group">
<div class="form-control-wrap">
<textarea class="form-control" id="input" rows="8" placeholder="需要编码/解码的字符串"></textarea>
</div>
</div>
<div class="form-group">
<select class="form-control" id="type">
<option value="urldecode">URL解码</option>
<option value="urlencode">URL编码</option>
<!--option value="rawurldecode">RAW-URL解码</option-->
<!--option value="rawurlencode">RAW-URL编码</option-->
<option value="base64decode">base64解码</option>
<option value="base64encode">base64编码</option>
<option value="htmldecode">HTML实体转字符</option>
<option value="htmlencode">字符转HTML实体</option>
<option value="unicodedecode">Unicode解码</option>
<option value="unicodeencode">Unicode编码</option>
<option value="asciitostr">ASCII转字符</option>
<option value="strtoascii">字符转ASCII</option>
<option value="x16decode">\x16进制解码</option>
<option value="x16encode">\x16进制编码</option>
<option value="md5">md5加密</option>
</select>
</div>
<div class="row">
<div class="col-4">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="submit()">
<em class="icon ni ni-play"></em>执行
</button>
</div>
<div class="col-4">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="exchange()">
<em class="icon ni ni-exchange-v"></em>交换
</button>
</div>
<div class="col-4">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="reset()">
<em class="icon ni ni-reload"></em>清空
</button>
</div>
</div>
<div class="form-group mt-3">
<label class="form-label" for="output">结果</label>
<div class="form-control-wrap">
<textarea class="form-control" id="output" rows="8" placeholder="编码/解码的结果"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}blueimp-md5/2.19.0/js/md5.min.js"></script>
<script>
function submit() {
var input = $("#input").val();
var type = $("#type").val();
if(input == '') return;
var output = '';
switch(type){
case 'urldecode':
output = decodeURIComponent(input.replace(/\+/g, '%20'));
break;
case 'urlencode':
output = encodeURIComponent(input).replace(/%20/g, '+');
break;
case 'rawurldecode':
output = decodeURIComponent(input);
break;
case 'rawurlencode':
output = encodeURIComponent(input);
break;
case 'base64decode':
output = Base64.decode(input)
break;
case 'base64encode':
output = Base64.encode(input)
break;
case 'htmldecode':
output = HtmlUtil.htmlDecode(input)
break;
case 'htmlencode':
output = HtmlUtil.htmlEncode(input)
break;
case 'unicodedecode':
output = Unicode.decode(input)
break;
case 'unicodeencode':
output = Unicode.encode(input)
break;
case 'asciitostr':
output = Ascii.decode(input)
break;
case 'strtoascii':
output = Ascii.encode(input)
break;
case 'x16decode':
output = jsx16.decode(input)
break;
case 'x16encode':
output = jsx16.encode(input)
break;
case 'md5':
output = md5(input)
break;
}
$("#output").val(output);
}
function exchange() {
var input = $("#input").val();
var output = $("#output").val();
$("#input").val(output);
$("#output").val(input);
}
function reset() {
$("#input").val('');
$("#output").val('');
}
var Base64 = {
encode: function (str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
function toSolidBytes(match, p1) {
return String.fromCharCode('0x' + p1);
}));
},
decode: function (str) {
return decodeURIComponent(atob(str).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
};
var HtmlUtil = {
htmlEncode: function(html) {
var tempDiv = document.createElement('div');
(tempDiv.textContent != undefined) ? (tempDiv.textContent = html) : (tempDiv.innerText = html);
var output = tempDiv.innerHTML;
tempDiv = null;
return output;
},
htmlDecode: function(text) {
var tempDiv = document.createElement('div');
tempDiv.innerHTML = text;
var output = tempDiv.innerText || tempDiv.textContent;
tempDiv = null;
return output;
}
};
var Unicode = {
encode: function(str){
var res=[];
for(var i=0;i < str.length;i++)
res[i]=("00"+str.charCodeAt(i).toString(16)).slice(-4);
return "\\u"+res.join("\\u");
},
decode: function (str) {
str=str.replace(/\\/g,"%");
return unescape(str);
}
};
var Ascii = {
encode: function(str){
var res=[];
for(var i=0;i < str.length;i++)
res[i]='&#'+str.charCodeAt(i)+';';
return res.join('');
},
decode: function (str) {
return str.split(";").map(function (c) {
c = c.replace('&#','');
if(c!='')return String.fromCharCode(c);
}).join('');
}
};
var jsx16 = {
encode: function(str){
var res=[];
for(var i=0;i < str.length;i++)
res[i]="\\x" + str.charCodeAt(i).toString(16);
return res.join("");
},
decode: function (str) {
str=str.replace(/\\x/g,"%");
return unescape(str);
}
};
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* 对称加密解密
*/
namespace plugin\dev\encrypt;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+109
View File
@@ -0,0 +1,109 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">对称加密解密</span>
</div>
<div class="form-group">
<label class="form-label" for="input">字符串</label>
<div class="form-control-wrap">
<textarea class="form-control" id="input" rows="8" placeholder="需要加密/解密的字符串"></textarea>
</div>
</div>
<div class="form-group">
<label class="form-label">加密方式</label>
<div class="form-control-wrap">
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="encrypt_type" id="customRadio1" value="AES" checked><label class="custom-control-label" for="customRadio1">AES</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="encrypt_type" id="customRadio2" value="DES"><label class="custom-control-label" for="customRadio2">DES</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="encrypt_type" id="customRadio3" value="RC4"><label class="custom-control-label" for="customRadio3">RC4</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="encrypt_type" id="customRadio4" value="Rabbit"><label class="custom-control-label" for="customRadio4">Rabbit</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="encrypt_type" id="customRadio5" value="TripleDES"><label class="custom-control-label" for="customRadio5">TripleDES</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="encrypt_type" id="customRadio6" value="RC4Drop"><label class="custom-control-label" for="customRadio6">RC4Drop</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="encrypt_type" id="customRadio7" value="RabbitLegacy"><label class="custom-control-label" for="customRadio7">RabbitLegacy</label></div>
</div>
</div>
<div class="form-group">
<label class="form-label">密钥</label>
<div class="form-control-wrap">
<input type="text" id="passphrase" placeholder="输入加密/解密的密钥" class="form-control">
</div>
</div>
<div class="row pt-1 pb-1">
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="encrypt()">
<em class="icon ni ni-lock"></em>加密
</button>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="decrypt()">
<em class="icon ni ni-unlock"></em>解密
</button>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="exchange()">
<em class="icon ni ni-exchange-v"></em>交换
</button>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" onclick="reset()">
<em class="icon ni ni-trash-empty"></em>清空
</button>
</div>
</div>
<div class="form-group mt-3">
<label class="form-label" for="output">结果</label>
<div class="form-control-wrap">
<textarea class="form-control" id="output" rows="8" placeholder="加密/解密的结果"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}crypto-js/4.1.1/crypto-js.min.js"></script>
<script>
function encrypt() {
var input = $("#input").val();
var passphrase = $("#passphrase").val();
var encrypt_type = $("input[name='encrypt_type']").val();
if(input == '' || passphrase == '') return;
try {
var output = CryptoJS[encrypt_type].encrypt(input, passphrase).toString();
$("#output").val(output);
} catch (e) {
layer.msg(e.message, {icon:2});
$("#output").val('');
}
}
function decrypt() {
var input = $("#input").val();
var passphrase = $("#passphrase").val();
var encrypt_type = $("input[name='encrypt_type']").val();
if(input == '' || passphrase == '') return;
try {
input = CryptoJS[encrypt_type].decrypt(input, passphrase).toString(CryptoJS.enc.Utf8);
$("#output").val(input);
} catch (e) {
layer.msg(e.message, {icon:2});
$("#output").val('');
}
}
function exchange() {
var input = $("#input").val();
var output = $("#output").val();
$("#input").val(output);
$("#output").val(input);
}
function reset() {
$("#input").val('');
$("#output").val('');
$("#passphrase").val('');
}
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* GitHub下载加速
*/
namespace plugin\dev\github;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+142
View File
@@ -0,0 +1,142 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">GitHub下载加速</span>
</div>
<div class="alert alert-info">有些节点不支持某些文件的下载,切换节点即可解决</div>
<div class="form-group">
<label class="form-label" for="set.input">Github链接</label>
<div class="form-control-wrap">
<input v-model="set.input" id="set.input" type="text" class="form-control form-control-lg" autocomplete="off">
</div>
</div>
<div class="form-group">
<label class="form-label" >选择节点</label>
<div class="form-control-wrap">
<select class="form-control form-control-lg" v-model="set.api">
<option v-for="(v,k) in apis" :value="k">{{k}}</option>
</select>
</div>
</div>
<div class="row pt-1 pb-1">
<div class="col-4">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" @click="download">
<em class="icon ni ni-download"></em>下载
</button>
</div>
<div class="col-4">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" @click="copy">
<em class="icon ni ni-copy"></em>复制
</button>
</div>
<div class="col-4">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" @click="reset">
<em class="icon ni ni-reload"></em>清空
</button>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
set: {
input: '',
output: '',
api: 'jsdelivr.net',
},
apis: {
'jsdelivr.net': (github) => {
if (github.version === 'archive') {
return 'https://ghproxy.com/' + github.url.toString()
}
return `https://fastly.jsdelivr.net/gh/${github.owner}/${github.repo}@${github.version}/${github.file}`
},
'ghproxy.com': (github) => {
return 'https://ghproxy.com/' + github.url.toString()
},
'tool.mintimate.cn': (github) => {
return 'https://tool.mintimate.cn/ghs/' + github.url.toString()
},
'monika.love[HK]': (github) => {
return `https://hk1.monika.love/${github.owner}/${github.repo}/${github.version}/${github.file}`
},
'ghproxy.fsou.cc': (github) => {
return 'https://ghproxy.fsou.cc/' + github.url.toString()
},
'gh.xiu2.xyz': (github) => {
return 'https://gh.xiu2.xyz/' + github.url.toString()
},
'pd.zwc365.com': (github) => {
return 'https://pd.zwc365.com/seturl/' + github.url.toString()
},
'gh.api.99988866.xyz': (github) => {
return 'https://gh.api.99988866.xyz/' + github.url.toString()
},
'fastgit.org': (github) => {
if (github.version === 'archive') {
return `https://download.fastgit.org/${github.owner}/${github.repo}/${github.version}/${github.file}`
}
return `https://raw.fastgit.org/${github.owner}/${github.repo}/${github.version}/${github.file}`
},
'staticaly.com': (github) => {
if (github.version === 'archive') {
return 'https://ghproxy.com/' + github.url.toString()
}
return `https://cdn.staticaly.com/gh/${github.owner}/${github.repo}/${github.version}/${github.file}`
},
},
},
watch: {
'set.input'(newVal) {
this.set.input = newVal.trim()
}
},
methods: {
download() {
this.set.output = this.apis[this.set.api](this.parse(this.set.input))
open(this.set.output)
},
reset() {
this.set.input = ''
this.set.output = ''
},
copy() {
this.set.output = this.apis[this.set.api](this.parse(this.set.input))
copy(this.set.output)
layer.msg('复制成功', {icon:1, time:600})
},
parse(url) {
if (!url.match(/http(s)?:\/\//)) {
url = 'https://' + url
}
let ins = new URL(url);
let split = ins.pathname.split('/');
if (ins.host === 'github.com' && split[3] === 'raw') {
split.splice(3,1)
}
return {
url: ins,
owner: split[1],
repo: split[2],
version: split[3],
file: split.slice(4).join('/'),
}
}
},
})
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* 在线进制转换
*/
namespace plugin\dev\hex_convert;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+169
View File
@@ -0,0 +1,169 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<style>
.table td{word-break: break-all;}
.input-small {
width: 90px;
border: 1px solid #bbb;
}
</style>
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">在线进制转换</span>
</div>
<div class="form-group mt-2" id="input_area">
<div class="form-control-wrap">
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="input_" id="customRadio1" value="2"><label class="custom-control-label" for="customRadio1">2进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="input_" id="customRadio2" value="4"><label class="custom-control-label" for="customRadio2">4进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="input_" id="customRadio3" value="8"><label class="custom-control-label" for="customRadio3">8进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="input_" id="customRadio4" value="10" checked><label class="custom-control-label" for="customRadio4">10进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="input_" id="customRadio5" value="16"><label class="custom-control-label" for="customRadio5">16进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="input_" id="customRadio6" value="32"><label class="custom-control-label" for="customRadio6">32进制</label></div>
<select id="input_num" class="input-small m-1"><option value="2">2进制</option><option value="3">3进制</option><option value="4">4进制</option><option value="5">5进制</option><option value="6">6进制</option><option value="7">7进制</option><option value="8">8进制</option><option value="9">9进制</option><option value="10" selected>10进制</option><option value="11">11进制</option><option value="12">12进制</option><option value="13">13进制</option><option value="14">14进制</option><option value="15">15进制</option><option value="16">16进制</option><option value="17">17进制</option><option value="18">18进制</option><option value="19">19进制</option><option value="20">20进制</option><option value="21">21进制</option><option value="22">22进制</option><option value="23">23进制</option><option value="24">24进制</option><option value="25">25进制</option><option value="26">26进制</option><option value="27">27进制</option><option value="28">28进制</option><option value="29">29进制</option><option value="30">30进制</option><option value="31">31进制</option><option value="32">32进制</option><option value="33">33进制</option><option value="34">34进制</option><option value="35">35进制</option><option value="36">36进制</option>
</select>
</div>
</div>
<div class="form-group">
<div class="form-control-wrap"><div class="input-group"><div class="input-group-prepend"><span class="input-group-text">转换数字</span></div><input type="text" class="form-control" id="input_value" onpropertychange="px()" onchange="px()" oninput="px()" placeholder="在此输入待转换数字"></div></div>
</div>
<div class="form-group pt-2" id="output_area">
<div class="form-control-wrap">
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="output_" id="customRadio11" value="2"><label class="custom-control-label" for="customRadio11">2进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="output_" id="customRadio12" value="4"><label class="custom-control-label" for="customRadio12">4进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="output_" id="customRadio13" value="8"><label class="custom-control-label" for="customRadio13">8进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="output_" id="customRadio14" value="10"><label class="custom-control-label" for="customRadio14">10进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="output_" id="customRadio15" value="16"checked><label class="custom-control-label" for="customRadio15">16进制</label></div>
<div class="custom-control custom-radio m-1"><input type="radio" class="custom-control-input" name="output_" id="customRadio16" value="32"><label class="custom-control-label" for="customRadio16">32进制</label></div>
<select id="output_num" onchange="px(1)" class="input-small m-1"><option value="2">2进制</option><option value="3">3进制</option><option value="4">4进制</option><option value="5">5进制</option><option value="6">6进制</option><option value="7">7进制</option><option value="8">8进制</option><option value="9">9进制</option><option value="10">10进制</option><option value="11">11进制</option><option value="12">12进制</option><option value="13">13进制</option><option value="14">14进制</option><option value="15">15进制</option><option value="16" selected>16进制</option><option value="17">17进制</option><option value="18">18进制</option><option value="19">19进制</option><option value="20">20进制</option><option value="21">21进制</option><option value="22">22进制</option><option value="23">23进制</option><option value="24">24进制</option><option value="25">25进制</option><option value="26">26进制</option><option value="27">27进制</option><option value="28">28进制</option><option value="29">29进制</option><option value="30">30进制</option><option value="31">31进制</option><option value="32">32进制</option><option value="33">33进制</option><option value="34">34进制</option><option value="35">35进制</option><option value="36">36进制</option>
</select>
</div>
</div>
<div class="form-group pb-2">
<div class="form-control-wrap"><div class="input-group"><div class="input-group-prepend"><span class="input-group-text">转换结果</span></div><input type="text" class="form-control" id="output_value" placeholder="转换结果"></div></div>
</div>
</div>
</div>
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">说明</span>
</div>
支持在2~36进制之间进行任意转换,支持浮点型
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script>
$(document).ready(function() {
$('[name="input_"]').click(function (){
$('#input_num').val($(this).val());
$('#input_value').val("");
$('#output_value').val("");
});
$('[name="output_"]').click(function (){
$('#output_num').val($(this).val());
px(1);
});
$("#input_num").change(function(){
$("#input_area input").removeAttr("checked");
var val = $(this).val();
$("#input_area input[value="+val+"]").attr("checked","checked");
$('#input_value').val("");
$('#output_value').val("");
});
$("#output_num").change(function(){
$("#output_area input").removeAttr("checked");
var val = $(this).val();
$("#output_area input[value="+val+"]").attr("checked","checked");
px(1);
});
});
function pxparseFloat(x,y){
x=x.toString();
var num=x;
var data=num.split(".");
var you=data[1].split(""); //将右边转换为数组 得到类似 [1,0,1]
var sum=0; //小数部分的和
for(var i=0;i<data[1].length;i++){
sum+=you[i]*Math.pow(y,-1*(i+1))
}
return parseInt(data[0],y)+sum;
}
function zhengze(x){
var str;
x=parseInt(x);
if(x<=10){
str=new RegExp("^[+\\-]?[0-"+(x-1)+"]*[.]?[0-"+(x-1)+"]*$","gi");
}else{
var letter="";
switch(x){
case 11:letter="a";break;
case 12:letter="b";break;
case 13:letter="c";break;
case 14:letter="d";break;
case 15:letter="e";break;
case 16:letter="f";break;
case 17:letter="g";break;
case 18:letter="h";break;
case 19:letter="i";break;
case 20:letter="j";break;
case 21:letter="k";break;
case 22:letter="l";break;
case 23:letter="m";break;
case 24:letter="n";break;
case 25:letter="o";break;
case 26:letter="p";break;
case 27:letter="q";break;
case 28:letter="r";break;
case 29:letter="s";break;
case 30:letter="t";break;
case 31:letter="u";break;
case 32:letter="v";break;
case 33:letter="w";break;
case 34:letter="x";break;
case 35:letter="y";break;
case 36:letter="z";break;
}
str=new RegExp("^[+\\-]?[0-9a-"+letter+"]*[.]?[0-9a-"+letter+"]*$","gi");
}
return str;
}
var n=50;
var shurukuang="";
var flag="";
function px(y){
if($("#input_value").val()!=flag||y){
flag=$("#input_value").val();
if($("#input_num").selectedIndex<n){
$("#input_value").val("");
$("#output_value").val("");
}else{
var px00=$("#input_value").val();
var px0=px00.match(zhengze($("#input_num").val()));
if(px0){
if(px0[0].indexOf(".")==-1){
var px1=parseInt(px0,$('#input_num').val());
}else{
var px1=pxparseFloat(px0,$('#input_num').val());
}
px1=px1.toString($('#output_num').val());
$("#output_value").val(px1);
shurukuang=px00;
}else{
$("#input_value").val(shurukuang);
}
}
n=$("#input_num").selectedIndex;
}
if($("#input_value").val()==""){
$("#output_value").val("");
}
}
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* JSON解析格式化
*/
namespace plugin\dev\json;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+73
View File
@@ -0,0 +1,73 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="head"}
<link rel="stylesheet" href="{$cdn_npm}[email protected]/dist/jsoneditor.min.css">
<script src="{$cdn_npm}[email protected]/dist/jsoneditor.min.js"></script>
<style>
.jsoneditor-poweredBy {
display: none;
}
.jsoneditor {
height: 70vh;
}
</style>
{/block}
{block name="main"}
<div class="container-xl">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">JSON解析格式化</span>
</div>
<div class="d-flex flex-wrap">
<div id="editor" class="flex-fill"></div>
<div id="view" class="flex-fill"></div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script>
const initialJson = {
"Array": [1, 2, 3],
"Boolean": true,
"Null": null,
"Number": 123,
"Object": {"a": "b", "c": "d"},
"String": "Hello World"
}
var editor = {
view: {
container: 'view',
editor: null,
opts: {
mode: 'code',
navigationBar: true,
mainMenuBar: true,
statusBar: true,
colorPicker: true,
modes: ['code', 'tree', 'view', 'form', 'text', 'preview'],
onChangeText(data) {
editor.edit.editor.setText(data)
},
}
},
edit: {
container: 'editor',
editor: null,
opts: {
mode: 'text',
onChangeText(data) {
editor.view.editor.setText(JSON.stringify(JSON.parse(data), null, 2))
}
}
},
};
var vieweditor = new JSONEditor(document.getElementById(editor.view.container), editor.view.opts);
var editeditor = new JSONEditor(document.getElementById(editor.edit.container), editor.edit.opts);
vieweditor.set(initialJson);
editeditor.set(initialJson);
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* Linux命令查询
*/
namespace plugin\dev\linux_command;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+123
View File
@@ -0,0 +1,123 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<link rel="stylesheet" href="{$cdn_cdnjs}highlight.js/11.4.0/styles/github-dark-dimmed.min.css">
<style>
h1,h2,h3,h4,h5,h6{font-weight:bolder}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.75em 0}h3{font-size:1.17em;margin:.83em 0}h4{margin:1.12em 0}h5{font-size:.83em;margin:1.5em 0}h6{font-size:.75em;margin:1.67em 0}.alert-container{margin:1em 1.6em .3em;overflow:auto;font-size:1.125em;line-height:normal;word-wrap:break-word;word-break:break-word}
</style>
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">Linux命令查询</span>
</div>
<div class="form-group">
<label class="form-label" for="command">command</label>
<div class="form-control-wrap">
<input v-model="set.input" id="command" type="text" placeholder="alias" class="form-control form-control-lg" autocomplete="off">
</div>
</div>
<div class="overflow-auto mt-4" v-show="set.input">
<div class="font-bold">搜索结果(点击查看详情)</div>
<table class="table mt-4 table-hover">
<thead>
<tr>
<th>Command</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr v-for="item in set.output" @click="preview(item)" role="button">
<td>{{commands[item].n}}</td>
<td>{{commands[item].d}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
<script src="{$cdn_npm}[email protected]/dist/markdown-it.min.js"></script>
<script src="{$cdn_cdnjs}highlight.js/11.4.0/highlight.min.js"></script>
<script>
var md = window.markdownit({
highlight: function (str, lang) {
if (lang && hljs.getLanguage(lang)) {
try {
return '<pre class="hljs p-4"><code>' +
hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
'</code></pre>';
} catch (__) {}
}
return '<pre class="hljs p-4"><code>' + md.utils.escapeHtml(str) + '</code></pre>';
},
typographer: true,
html: true,
});
new Vue({
el: '#app',
data: {
commands: {},
set: {
input: '',
output: [],
}
},
mounted() {
this.getData()
},
watch: {
'set.input'() {
this.set.output = Object.keys(this.commands).filter(command => {
return (
this.commands[command].n.toString().toLowerCase().indexOf(this.set.input.toLowerCase()) >= 0
)
})
}
},
methods: {
getData() {
var ii = layer.load();
var that = this;
request('{$cdn_npm}linux-command/dist/data.json', {}, {
type: 'GET',
cache: true
}).then(data => {
layer.close(ii);
that.commands = data
},() => {
layer.close(ii);
layer.msg('服务器错误', {icon: 5});
})
},
preview(command) {
var ii = layer.load();
request(`{$cdn_npm}linux-command/command/${command}.md`, {}, {
type: 'GET',
dataType:'html',
cache: true
}).then(data => {
layer.close(ii);
let result = md.render(data);
layer.open({
type: 1,
area: ["100%","100%"],
title: command,
skin: 'layui-layer-rim',
content: `<div class="alert-container">${result}</div>`
})
},() => {
layer.close(ii);
layer.msg('服务器错误', {icon: 5});
})
}
},
})
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* Markdown在线编辑
*/
namespace plugin\dev\markdown;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+48
View File
@@ -0,0 +1,48 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<link rel="stylesheet" href="{$cdn_npm}[email protected]/css/editormd.min.css">
<div class="container-fluid" id="app">
<div class="col-12 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">Markdown在线编辑</span>
</div>
<div id="editor">
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_npm}[email protected]/editormd.min.js"></script>
<script>
$(function () {
var editor = editormd("editor", {
width: "100%",
height: "600px",
path : "{$cdn_npm}[email protected]/lib/",
// theme : "dark",
// previewTheme : "dark",
// editorTheme : "pastel-on-dark",
markdown : '## Hello World',
codeFold: true,
//syncScrolling : false,
saveHTMLToTextarea: true, // 保存 HTML 到 Textarea
searchReplace: true,
//watch : false, // 关闭实时预览
htmlDecode: "style,script,iframe|on*", // 开启 HTML 标签解析,为了安全性,默认不开启
//toolbar : false, //关闭工具栏
//previewCodeHighlight : false, // 关闭预览 HTML 的代码块高亮,默认开启
emoji: true,
taskList: true,
tocm: true, // Using [TOCM]
tex: true, // 开启科学公式TeX语言支持,默认关闭
flowChart: true, // 开启流程图支持,默认关闭
sequenceDiagram: true, // 开启时序/序列图支持,默认关闭,
});
});
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* MimeType类型速查
*/
namespace plugin\dev\mime_type;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+2629
View File
@@ -0,0 +1,2629 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-12 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">MimeType类型速查</span>
</div>
<div class="alert alert-info"><em class="icon ni ni-info"></em> 请使用 <span class="badge badge-success">Ctrl+F</span> 查找所需信息。
</div>
<div class="row">
<div class="col-12 col-md-6">
<table class="table table-hover table-bordered table-striped table-sm">
<thead>
<tr>
<th>后缀</th>
<th>Content-Type(Mime-Type)</th>
</tr>
</thead>
<tbody>
<tr>
<td>.3dm</td>
<td>x-world/x-3dmf</td>
</tr>
<tr>
<td>.3dmf</td>
<td>x-world/x-3dmf</td>
</tr>
<tr>
<td>.a</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.aab</td>
<td>application/x-authorware-bin</td>
</tr>
<tr>
<td>.aam</td>
<td>application/x-authorware-map</td>
</tr>
<tr>
<td>.aas</td>
<td>application/x-authorware-seg</td>
</tr>
<tr>
<td>.abc</td>
<td>text/vnd.abc</td>
</tr>
<tr>
<td>.acgi</td>
<td>text/html</td>
</tr>
<tr>
<td>.afl</td>
<td>video/animaflex</td>
</tr>
<tr>
<td>.ai</td>
<td>application/postscript</td>
</tr>
<tr>
<td>.aif</td>
<td>audio/aiff</td>
</tr>
<tr>
<td>.aif</td>
<td>audio/x-aiff</td>
</tr>
<tr>
<td>.aifc</td>
<td>audio/aiff</td>
</tr>
<tr>
<td>.aifc</td>
<td>audio/x-aiff</td>
</tr>
<tr>
<td>.aiff</td>
<td>audio/aiff</td>
</tr>
<tr>
<td>.aiff</td>
<td>audio/x-aiff</td>
</tr>
<tr>
<td>.aim</td>
<td>application/x-aim</td>
</tr>
<tr>
<td>.aip</td>
<td>text/x-audiosoft-intra</td>
</tr>
<tr>
<td>.ani</td>
<td>application/x-navi-animation</td>
</tr>
<tr>
<td>.aos</td>
<td>application/x-nokia-9000-communicator-add-on-software</td>
</tr>
<tr>
<td>.aps</td>
<td>application/mime</td>
</tr>
<tr>
<td>.arc</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.arj</td>
<td>application/arj</td>
</tr>
<tr>
<td>.arj</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.art</td>
<td>image/x-jg</td>
</tr>
<tr>
<td>.asf</td>
<td>video/x-ms-asf</td>
</tr>
<tr>
<td>.asm</td>
<td>text/x-asm</td>
</tr>
<tr>
<td>.asp</td>
<td>text/asp</td>
</tr>
<tr>
<td>.asx</td>
<td>application/x-mplayer2</td>
</tr>
<tr>
<td>.asx</td>
<td>video/x-ms-asf</td>
</tr>
<tr>
<td>.asx</td>
<td>video/x-ms-asf-plugin</td>
</tr>
<tr>
<td>.au</td>
<td>audio/basic</td>
</tr>
<tr>
<td>.au</td>
<td>audio/x-au</td>
</tr>
<tr>
<td>.avi</td>
<td>application/x-troff-msvideo</td>
</tr>
<tr>
<td>.avi</td>
<td>video/avi</td>
</tr>
<tr>
<td>.avi</td>
<td>video/msvideo</td>
</tr>
<tr>
<td>.avi</td>
<td>video/x-msvideo</td>
</tr>
<tr>
<td>.avs</td>
<td>video/avs-video</td>
</tr>
<tr>
<td>.bcpio</td>
<td>application/x-bcpio</td>
</tr>
<tr>
<td>.bin</td>
<td>application/mac-binary</td>
</tr>
<tr>
<td>.bin</td>
<td>application/macbinary</td>
</tr>
<tr>
<td>.bin</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.bin</td>
<td>application/x-binary</td>
</tr>
<tr>
<td>.bin</td>
<td>application/x-macbinary</td>
</tr>
<tr>
<td>.bm</td>
<td>image/bmp</td>
</tr>
<tr>
<td>.bmp</td>
<td>image/bmp</td>
</tr>
<tr>
<td>.bmp</td>
<td>image/x-windows-bmp</td>
</tr>
<tr>
<td>.boo</td>
<td>application/book</td>
</tr>
<tr>
<td>.book</td>
<td>application/book</td>
</tr>
<tr>
<td>.boz</td>
<td>application/x-bzip2</td>
</tr>
<tr>
<td>.bsh</td>
<td>application/x-bsh</td>
</tr>
<tr>
<td>.bz</td>
<td>application/x-bzip</td>
</tr>
<tr>
<td>.bz2</td>
<td>application/x-bzip2</td>
</tr>
<tr>
<td>.c</td>
<td>text/plain</td>
</tr>
<tr>
<td>.c</td>
<td>text/x-c</td>
</tr>
<tr>
<td>.c++</td>
<td>text/plain</td>
</tr>
<tr>
<td>.cat</td>
<td>application/vnd.ms-pki.seccat</td>
</tr>
<tr>
<td>.cc</td>
<td>text/plain</td>
</tr>
<tr>
<td>.cc</td>
<td>text/x-c</td>
</tr>
<tr>
<td>.ccad</td>
<td>application/clariscad</td>
</tr>
<tr>
<td>.cco</td>
<td>application/x-cocoa</td>
</tr>
<tr>
<td>.cdf</td>
<td>application/cdf</td>
</tr>
<tr>
<td>.cdf</td>
<td>application/x-cdf</td>
</tr>
<tr>
<td>.cdf</td>
<td>application/x-netcdf</td>
</tr>
<tr>
<td>.cer</td>
<td>application/pkix-cert</td>
</tr>
<tr>
<td>.cer</td>
<td>application/x-x509-ca-cert</td>
</tr>
<tr>
<td>.cha</td>
<td>application/x-chat</td>
</tr>
<tr>
<td>.chat</td>
<td>application/x-chat</td>
</tr>
<tr>
<td>.class</td>
<td>application/java</td>
</tr>
<tr>
<td>.class</td>
<td>application/java-byte-code</td>
</tr>
<tr>
<td>.class</td>
<td>application/x-java-class</td>
</tr>
<tr>
<td>.com</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.com</td>
<td>text/plain</td>
</tr>
<tr>
<td>.conf</td>
<td>text/plain</td>
</tr>
<tr>
<td>.cpio</td>
<td>application/x-cpio</td>
</tr>
<tr>
<td>.cpp</td>
<td>text/x-c</td>
</tr>
<tr>
<td>.cpt</td>
<td>application/mac-compactpro</td>
</tr>
<tr>
<td>.cpt</td>
<td>application/x-compactpro</td>
</tr>
<tr>
<td>.cpt</td>
<td>application/x-cpt</td>
</tr>
<tr>
<td>.crl</td>
<td>application/pkcs-crl</td>
</tr>
<tr>
<td>.crl</td>
<td>application/pkix-crl</td>
</tr>
<tr>
<td>.crt</td>
<td>application/pkix-cert</td>
</tr>
<tr>
<td>.crt</td>
<td>application/x-x509-ca-cert</td>
</tr>
<tr>
<td>.crt</td>
<td>application/x-x509-user-cert</td>
</tr>
<tr>
<td>.csh</td>
<td>application/x-csh</td>
</tr>
<tr>
<td>.csh</td>
<td>text/x-script.csh</td>
</tr>
<tr>
<td>.css</td>
<td>application/x-pointplus</td>
</tr>
<tr>
<td>.css</td>
<td>text/css</td>
</tr>
<tr>
<td>.cxx</td>
<td>text/plain</td>
</tr>
<tr>
<td>.dcr</td>
<td>application/x-director</td>
</tr>
<tr>
<td>.deepv</td>
<td>application/x-deepv</td>
</tr>
<tr>
<td>.def</td>
<td>text/plain</td>
</tr>
<tr>
<td>.der</td>
<td>application/x-x509-ca-cert</td>
</tr>
<tr>
<td>.dif</td>
<td>video/x-dv</td>
</tr>
<tr>
<td>.dir</td>
<td>application/x-director</td>
</tr>
<tr>
<td>.dl</td>
<td>video/dl</td>
</tr>
<tr>
<td>.dl</td>
<td>video/x-dl</td>
</tr>
<tr>
<td>.doc</td>
<td>application/msword</td>
</tr>
<tr>
<td>.dot</td>
<td>application/msword</td>
</tr>
<tr>
<td>.dp</td>
<td>application/commonground</td>
</tr>
<tr>
<td>.drw</td>
<td>application/drafting</td>
</tr>
<tr>
<td>.dump</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.dv</td>
<td>video/x-dv</td>
</tr>
<tr>
<td>.dvi</td>
<td>application/x-dvi</td>
</tr>
<tr>
<td>.dwf</td>
<td>drawing/x-dwf (old)</td>
</tr>
<tr>
<td>.dwf</td>
<td>model/vnd.dwf</td>
</tr>
<tr>
<td>.dwg</td>
<td>application/acad</td>
</tr>
<tr>
<td>.dwg</td>
<td>image/vnd.dwg</td>
</tr>
<tr>
<td>.dwg</td>
<td>image/x-dwg</td>
</tr>
<tr>
<td>.dxf</td>
<td>application/dxf</td>
</tr>
<tr>
<td>.dxf</td>
<td>image/vnd.dwg</td>
</tr>
<tr>
<td>.dxf</td>
<td>image/x-dwg</td>
</tr>
<tr>
<td>.dxr</td>
<td>application/x-director</td>
</tr>
<tr>
<td>.el</td>
<td>text/x-script.elisp</td>
</tr>
<tr>
<td>.elc</td>
<td>application/x-bytecode.elisp (compiled elisp)</td>
</tr>
<tr>
<td>.elc</td>
<td>application/x-elc</td>
</tr>
<tr>
<td>.env</td>
<td>application/x-envoy</td>
</tr>
<tr>
<td>.eps</td>
<td>application/postscript</td>
</tr>
<tr>
<td>.es</td>
<td>application/x-esrehber</td>
</tr>
<tr>
<td>.etx</td>
<td>text/x-setext</td>
</tr>
<tr>
<td>.evy</td>
<td>application/envoy</td>
</tr>
<tr>
<td>.evy</td>
<td>application/x-envoy</td>
</tr>
<tr>
<td>.exe</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.f</td>
<td>text/plain</td>
</tr>
<tr>
<td>.f</td>
<td>text/x-fortran</td>
</tr>
<tr>
<td>.f77</td>
<td>text/x-fortran</td>
</tr>
<tr>
<td>.f90</td>
<td>text/plain</td>
</tr>
<tr>
<td>.f90</td>
<td>text/x-fortran</td>
</tr>
<tr>
<td>.fdf</td>
<td>application/vnd.fdf</td>
</tr>
<tr>
<td>.fif</td>
<td>application/fractals</td>
</tr>
<tr>
<td>.fif</td>
<td>image/fif</td>
</tr>
<tr>
<td>.fli</td>
<td>video/fli</td>
</tr>
<tr>
<td>.fli</td>
<td>video/x-fli</td>
</tr>
<tr>
<td>.flo</td>
<td>image/florian</td>
</tr>
<tr>
<td>.flx</td>
<td>text/vnd.fmi.flexstor</td>
</tr>
<tr>
<td>.fmf</td>
<td>video/x-atomic3d-feature</td>
</tr>
<tr>
<td>.for</td>
<td>text/plain</td>
</tr>
<tr>
<td>.for</td>
<td>text/x-fortran</td>
</tr>
<tr>
<td>.fpx</td>
<td>image/vnd.fpx</td>
</tr>
<tr>
<td>.fpx</td>
<td>image/vnd.net-fpx</td>
</tr>
<tr>
<td>.frl</td>
<td>application/freeloader</td>
</tr>
<tr>
<td>.funk</td>
<td>audio/make</td>
</tr>
<tr>
<td>.g</td>
<td>text/plain</td>
</tr>
<tr>
<td>.g3</td>
<td>image/g3fax</td>
</tr>
<tr>
<td>.gif</td>
<td>image/gif</td>
</tr>
<tr>
<td>.gl</td>
<td>video/gl</td>
</tr>
<tr>
<td>.gl</td>
<td>video/x-gl</td>
</tr>
<tr>
<td>.gsd</td>
<td>audio/x-gsm</td>
</tr>
<tr>
<td>.gsm</td>
<td>audio/x-gsm</td>
</tr>
<tr>
<td>.gsp</td>
<td>application/x-gsp</td>
</tr>
<tr>
<td>.gss</td>
<td>application/x-gss</td>
</tr>
<tr>
<td>.gtar</td>
<td>application/x-gtar</td>
</tr>
<tr>
<td>.gz</td>
<td>application/x-compressed</td>
</tr>
<tr>
<td>.gz</td>
<td>application/x-gzip</td>
</tr>
<tr>
<td>.gzip</td>
<td>application/x-gzip</td>
</tr>
<tr>
<td>.gzip</td>
<td>multipart/x-gzip</td>
</tr>
<tr>
<td>.h</td>
<td>text/plain</td>
</tr>
<tr>
<td>.h</td>
<td>text/x-h</td>
</tr>
<tr>
<td>.hdf</td>
<td>application/x-hdf</td>
</tr>
<tr>
<td>.help</td>
<td>application/x-helpfile</td>
</tr>
<tr>
<td>.hgl</td>
<td>application/vnd.hp-hpgl</td>
</tr>
<tr>
<td>.hh</td>
<td>text/plain</td>
</tr>
<tr>
<td>.hh</td>
<td>text/x-h</td>
</tr>
<tr>
<td>.hlb</td>
<td>text/x-script</td>
</tr>
<tr>
<td>.hlp</td>
<td>application/hlp</td>
</tr>
<tr>
<td>.hlp</td>
<td>application/x-helpfile</td>
</tr>
<tr>
<td>.hlp</td>
<td>application/x-winhelp</td>
</tr>
<tr>
<td>.hpg</td>
<td>application/vnd.hp-hpgl</td>
</tr>
<tr>
<td>.hpgl</td>
<td>application/vnd.hp-hpgl</td>
</tr>
<tr>
<td>.hqx</td>
<td>application/binhex</td>
</tr>
<tr>
<td>.hqx</td>
<td>application/binhex4</td>
</tr>
<tr>
<td>.hqx</td>
<td>application/mac-binhex</td>
</tr>
<tr>
<td>.hqx</td>
<td>application/mac-binhex40</td>
</tr>
<tr>
<td>.hqx</td>
<td>application/x-binhex40</td>
</tr>
<tr>
<td>.hqx</td>
<td>application/x-mac-binhex40</td>
</tr>
<tr>
<td>.hta</td>
<td>application/hta</td>
</tr>
<tr>
<td>.htc</td>
<td>text/x-component</td>
</tr>
<tr>
<td>.htm</td>
<td>text/html</td>
</tr>
<tr>
<td>.html</td>
<td>text/html</td>
</tr>
<tr>
<td>.htmls</td>
<td>text/html</td>
</tr>
<tr>
<td>.htt</td>
<td>text/webviewhtml</td>
</tr>
<tr>
<td>.htx</td>
<td>text/html</td>
</tr>
<tr>
<td>.ice</td>
<td>x-conference/x-cooltalk</td>
</tr>
<tr>
<td>.ico</td>
<td>image/x-icon</td>
</tr>
<tr>
<td>.idc</td>
<td>text/plain</td>
</tr>
<tr>
<td>.ief</td>
<td>image/ief</td>
</tr>
<tr>
<td>.iefs</td>
<td>image/ief</td>
</tr>
<tr>
<td>.iges</td>
<td>application/iges</td>
</tr>
<tr>
<td>.iges</td>
<td>model/iges</td>
</tr>
<tr>
<td>.igs</td>
<td>application/iges</td>
</tr>
<tr>
<td>.igs</td>
<td>model/iges</td>
</tr>
<tr>
<td>.ima</td>
<td>application/x-ima</td>
</tr>
<tr>
<td>.imap</td>
<td>application/x-httpd-imap</td>
</tr>
<tr>
<td>.inf</td>
<td>application/inf</td>
</tr>
<tr>
<td>.ins</td>
<td>application/x-internett-signup</td>
</tr>
<tr>
<td>.ip</td>
<td>application/x-ip2</td>
</tr>
<tr>
<td>.isu</td>
<td>video/x-isvideo</td>
</tr>
<tr>
<td>.it</td>
<td>audio/it</td>
</tr>
<tr>
<td>.iv</td>
<td>application/x-inventor</td>
</tr>
<tr>
<td>.ivr</td>
<td>i-world/i-vrml</td>
</tr>
<tr>
<td>.ivy</td>
<td>application/x-livescreen</td>
</tr>
<tr>
<td>.jam</td>
<td>audio/x-jam</td>
</tr>
<tr>
<td>.jav</td>
<td>text/plain</td>
</tr>
<tr>
<td>.jav</td>
<td>text/x-java-source</td>
</tr>
<tr>
<td>.java</td>
<td>text/plain</td>
</tr>
<tr>
<td>.java</td>
<td>text/x-java-source</td>
</tr>
<tr>
<td>.jcm</td>
<td>application/x-java-commerce</td>
</tr>
<tr>
<td>.jfif</td>
<td>image/jpeg</td>
</tr>
<tr>
<td>.jfif</td>
<td>image/pjpeg</td>
</tr>
<tr>
<td>.jfif-tbnl</td>
<td>image/jpeg</td>
</tr>
<tr>
<td>.jpe</td>
<td>image/jpeg</td>
</tr>
<tr>
<td>.jpe</td>
<td>image/pjpeg</td>
</tr>
<tr>
<td>.jpeg</td>
<td>image/jpeg</td>
</tr>
<tr>
<td>.jpeg</td>
<td>image/pjpeg</td>
</tr>
<tr>
<td>.jpg</td>
<td>image/jpeg</td>
</tr>
<tr>
<td>.jpg</td>
<td>image/pjpeg</td>
</tr>
<tr>
<td>.jps</td>
<td>image/x-jps</td>
</tr>
<tr>
<td>.js</td>
<td>application/x-javascript</td>
</tr>
<tr>
<td>.js</td>
<td>application/javascript</td>
</tr>
<tr>
<td>.js</td>
<td>application/ecmascript</td>
</tr>
<tr>
<td>.js</td>
<td>text/javascript</td>
</tr>
<tr>
<td>.js</td>
<td>text/ecmascript</td>
</tr>
<tr>
<td>.jut</td>
<td>image/jutvision</td>
</tr>
<tr>
<td>.kar</td>
<td>audio/midi</td>
</tr>
<tr>
<td>.kar</td>
<td>music/x-karaoke</td>
</tr>
<tr>
<td>.ksh</td>
<td>application/x-ksh</td>
</tr>
<tr>
<td>.ksh</td>
<td>text/x-script.ksh</td>
</tr>
<tr>
<td>.la</td>
<td>audio/nspaudio</td>
</tr>
<tr>
<td>.la</td>
<td>audio/x-nspaudio</td>
</tr>
<tr>
<td>.lam</td>
<td>audio/x-liveaudio</td>
</tr>
<tr>
<td>.latex</td>
<td>application/x-latex</td>
</tr>
<tr>
<td>.lha</td>
<td>application/lha</td>
</tr>
<tr>
<td>.lha</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.lha</td>
<td>application/x-lha</td>
</tr>
<tr>
<td>.lhx</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.list</td>
<td>text/plain</td>
</tr>
<tr>
<td>.lma</td>
<td>audio/nspaudio</td>
</tr>
<tr>
<td>.lma</td>
<td>audio/x-nspaudio</td>
</tr>
<tr>
<td>.log</td>
<td>text/plain</td>
</tr>
<tr>
<td>.lsp</td>
<td>application/x-lisp</td>
</tr>
<tr>
<td>.lsp</td>
<td>text/x-script.lisp</td>
</tr>
<tr>
<td>.lst</td>
<td>text/plain</td>
</tr>
<tr>
<td>.lsx</td>
<td>text/x-la-asf</td>
</tr>
<tr>
<td>.ltx</td>
<td>application/x-latex</td>
</tr>
<tr>
<td>.lzh</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.lzh</td>
<td>application/x-lzh</td>
</tr>
<tr>
<td>.lzx</td>
<td>application/lzx</td>
</tr>
<tr>
<td>.lzx</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.lzx</td>
<td>application/x-lzx</td>
</tr>
<tr>
<td>.m</td>
<td>text/plain</td>
</tr>
<tr>
<td>.m</td>
<td>text/x-m</td>
</tr>
<tr>
<td>.m1v</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.m2a</td>
<td>audio/mpeg</td>
</tr>
<tr>
<td>.m2v</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.m3u</td>
<td>audio/x-mpequrl</td>
</tr>
<tr>
<td>.man</td>
<td>application/x-troff-man</td>
</tr>
<tr>
<td>.map</td>
<td>application/x-navimap</td>
</tr>
<tr>
<td>.mar</td>
<td>text/plain</td>
</tr>
<tr>
<td>.mbd</td>
<td>application/mbedlet</td>
</tr>
<tr>
<td>.mc$</td>
<td>application/x-magic-cap-package-1.0</td>
</tr>
<tr>
<td>.mcd</td>
<td>application/mcad</td>
</tr>
<tr>
<td>.mcd</td>
<td>application/x-mathcad</td>
</tr>
<tr>
<td>.mcf</td>
<td>image/vasa</td>
</tr>
<tr>
<td>.mcf</td>
<td>text/mcf</td>
</tr>
<tr>
<td>.mcp</td>
<td>application/netmc</td>
</tr>
<tr>
<td>.me</td>
<td>application/x-troff-me</td>
</tr>
<tr>
<td>.mht</td>
<td>message/rfc822</td>
</tr>
<tr>
<td>.mhtml</td>
<td>message/rfc822</td>
</tr>
<tr>
<td>.mid</td>
<td>application/x-midi</td>
</tr>
<tr>
<td>.mid</td>
<td>audio/midi</td>
</tr>
<tr>
<td>.mid</td>
<td>audio/x-mid</td>
</tr>
<tr>
<td>.mid</td>
<td>audio/x-midi</td>
</tr>
<tr>
<td>.mid</td>
<td>music/crescendo</td>
</tr>
<tr>
<td>.mid</td>
<td>x-music/x-midi</td>
</tr>
<tr>
<td>.midi</td>
<td>application/x-midi</td>
</tr>
<tr>
<td>.midi</td>
<td>audio/midi</td>
</tr>
<tr>
<td>.midi</td>
<td>audio/x-mid</td>
</tr>
<tr>
<td>.midi</td>
<td>audio/x-midi</td>
</tr>
<tr>
<td>.midi</td>
<td>music/crescendo</td>
</tr>
<tr>
<td>.midi</td>
<td>x-music/x-midi</td>
</tr>
<tr>
<td>.mif</td>
<td>application/x-frame</td>
</tr>
<tr>
<td>.mif</td>
<td>application/x-mif</td>
</tr>
<tr>
<td>.mime</td>
<td>message/rfc822</td>
</tr>
<tr>
<td>.mime</td>
<td>www/mime</td>
</tr>
<tr>
<td>.mjf</td>
<td>audio/x-vnd.audioexplosion.mjuicemediafile</td>
</tr>
<tr>
<td>.mjpg</td>
<td>video/x-motion-jpeg</td>
</tr>
<tr>
<td>.mm</td>
<td>application/base64</td>
</tr>
<tr>
<td>.mm</td>
<td>application/x-meme</td>
</tr>
<tr>
<td>.mme</td>
<td>application/base64</td>
</tr>
<tr>
<td>.mod</td>
<td>audio/mod</td>
</tr>
<tr>
<td>.mod</td>
<td>audio/x-mod</td>
</tr>
<tr>
<td>.moov</td>
<td>video/quicktime</td>
</tr>
<tr>
<td>.mov</td>
<td>video/quicktime</td>
</tr>
<tr>
<td>.movie</td>
<td>video/x-sgi-movie</td>
</tr>
<tr>
<td>.mp2</td>
<td>audio/mpeg</td>
</tr>
<tr>
<td>.mp2</td>
<td>audio/x-mpeg</td>
</tr>
<tr>
<td>.mp2</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.mp2</td>
<td>video/x-mpeg</td>
</tr>
<tr>
<td>.mp2</td>
<td>video/x-mpeq2a</td>
</tr>
<tr>
<td>.mp3</td>
<td>audio/mpeg3</td>
</tr>
<tr>
<td>.mp3</td>
<td>audio/x-mpeg-3</td>
</tr>
<tr>
<td>.mp3</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.mp3</td>
<td>video/x-mpeg</td>
</tr>
<tr>
<td>.mpa</td>
<td>audio/mpeg</td>
</tr>
<tr>
<td>.mpa</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.mpc</td>
<td>application/x-project</td>
</tr>
<tr>
<td>.mpe</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.mpeg</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.mpg</td>
<td>audio/mpeg</td>
</tr>
<tr>
<td>.mpg</td>
<td>video/mpeg</td>
</tr>
<tr>
<td>.mpga</td>
<td>audio/mpeg</td>
</tr>
<tr>
<td>.mpp</td>
<td>application/vnd.ms-project</td>
</tr>
<tr>
<td>.mpt</td>
<td>application/x-project</td>
</tr>
<tr>
<td>.mpv</td>
<td>application/x-project</td>
</tr>
<tr>
<td>.mpx</td>
<td>application/x-project</td>
</tr>
<tr>
<td>.mrc</td>
<td>application/marc</td>
</tr>
<tr>
<td>.ms</td>
<td>application/x-troff-ms</td>
</tr>
<tr>
<td>.mv</td>
<td>video/x-sgi-movie</td>
</tr>
<tr>
<td>.my</td>
<td>audio/make</td>
</tr>
<tr>
<td>.mzz</td>
<td>application/x-vnd.audioexplosion.mzz</td>
</tr>
<tr>
<td>.nap</td>
<td>image/naplps</td>
</tr>
<tr>
<td>.naplps</td>
<td>image/naplps</td>
</tr>
<tr>
<td>.nc</td>
<td>application/x-netcdf</td>
</tr>
</tbody>
</table>
</div>
<div class="col-12 col-md-6">
<table class="table table-hover table-bordered table-striped table-sm">
<thead>
<tr>
<th>后缀</th>
<th>Content-Type(Mime-Type)</th>
</tr>
</thead>
<tbody>
<tr>
<td>.ncm</td>
<td>application/vnd.nokia.configuration-message</td>
</tr>
<tr>
<td>.nif</td>
<td>image/x-niff</td>
</tr>
<tr>
<td>.niff</td>
<td>image/x-niff</td>
</tr>
<tr>
<td>.nix</td>
<td>application/x-mix-transfer</td>
</tr>
<tr>
<td>.nsc</td>
<td>application/x-conference</td>
</tr>
<tr>
<td>.nvd</td>
<td>application/x-navidoc</td>
</tr>
<tr>
<td>.o</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.oda</td>
<td>application/oda</td>
</tr>
<tr>
<td>.omc</td>
<td>application/x-omc</td>
</tr>
<tr>
<td>.omcd</td>
<td>application/x-omcdatamaker</td>
</tr>
<tr>
<td>.omcr</td>
<td>application/x-omcregerator</td>
</tr>
<tr>
<td>.p</td>
<td>text/x-pascal</td>
</tr>
<tr>
<td>.p10</td>
<td>application/pkcs10</td>
</tr>
<tr>
<td>.p10</td>
<td>application/x-pkcs10</td>
</tr>
<tr>
<td>.p12</td>
<td>application/pkcs-12</td>
</tr>
<tr>
<td>.p12</td>
<td>application/x-pkcs12</td>
</tr>
<tr>
<td>.p7a</td>
<td>application/x-pkcs7-signature</td>
</tr>
<tr>
<td>.p7c</td>
<td>application/pkcs7-mime</td>
</tr>
<tr>
<td>.p7c</td>
<td>application/x-pkcs7-mime</td>
</tr>
<tr>
<td>.p7m</td>
<td>application/pkcs7-mime</td>
</tr>
<tr>
<td>.p7m</td>
<td>application/x-pkcs7-mime</td>
</tr>
<tr>
<td>.p7r</td>
<td>application/x-pkcs7-certreqresp</td>
</tr>
<tr>
<td>.p7s</td>
<td>application/pkcs7-signature</td>
</tr>
<tr>
<td>.part</td>
<td>application/pro_eng</td>
</tr>
<tr>
<td>.pas</td>
<td>text/pascal</td>
</tr>
<tr>
<td>.pbm</td>
<td>image/x-portable-bitmap</td>
</tr>
<tr>
<td>.pcl</td>
<td>application/vnd.hp-pcl</td>
</tr>
<tr>
<td>.pcl</td>
<td>application/x-pcl</td>
</tr>
<tr>
<td>.pct</td>
<td>image/x-pict</td>
</tr>
<tr>
<td>.pcx</td>
<td>image/x-pcx</td>
</tr>
<tr>
<td>.pdb</td>
<td>chemical/x-pdb</td>
</tr>
<tr>
<td>.pdf</td>
<td>application/pdf</td>
</tr>
<tr>
<td>.pfunk</td>
<td>audio/make</td>
</tr>
<tr>
<td>.pfunk</td>
<td>audio/make.my.funk</td>
</tr>
<tr>
<td>.pgm</td>
<td>image/x-portable-graymap</td>
</tr>
<tr>
<td>.pgm</td>
<td>image/x-portable-greymap</td>
</tr>
<tr>
<td>.pic</td>
<td>image/pict</td>
</tr>
<tr>
<td>.pict</td>
<td>image/pict</td>
</tr>
<tr>
<td>.pkg</td>
<td>application/x-newton-compatible-pkg</td>
</tr>
<tr>
<td>.pko</td>
<td>application/vnd.ms-pki.pko</td>
</tr>
<tr>
<td>.pl</td>
<td>text/plain</td>
</tr>
<tr>
<td>.pl</td>
<td>text/x-script.perl</td>
</tr>
<tr>
<td>.plx</td>
<td>application/x-pixclscript</td>
</tr>
<tr>
<td>.pm</td>
<td>image/x-xpixmap</td>
</tr>
<tr>
<td>.pm</td>
<td>text/x-script.perl-module</td>
</tr>
<tr>
<td>.pm4</td>
<td>application/x-pagemaker</td>
</tr>
<tr>
<td>.pm5</td>
<td>application/x-pagemaker</td>
</tr>
<tr>
<td>.png</td>
<td>image/png</td>
</tr>
<tr>
<td>.pnm</td>
<td>application/x-portable-anymap</td>
</tr>
<tr>
<td>.pnm</td>
<td>image/x-portable-anymap</td>
</tr>
<tr>
<td>.pot</td>
<td>application/mspowerpoint</td>
</tr>
<tr>
<td>.pot</td>
<td>application/vnd.ms-powerpoint</td>
</tr>
<tr>
<td>.pov</td>
<td>model/x-pov</td>
</tr>
<tr>
<td>.ppa</td>
<td>application/vnd.ms-powerpoint</td>
</tr>
<tr>
<td>.ppm</td>
<td>image/x-portable-pixmap</td>
</tr>
<tr>
<td>.pps</td>
<td>application/mspowerpoint</td>
</tr>
<tr>
<td>.pps</td>
<td>application/vnd.ms-powerpoint</td>
</tr>
<tr>
<td>.ppt</td>
<td>application/mspowerpoint</td>
</tr>
<tr>
<td>.ppt</td>
<td>application/powerpoint</td>
</tr>
<tr>
<td>.ppt</td>
<td>application/vnd.ms-powerpoint</td>
</tr>
<tr>
<td>.ppt</td>
<td>application/x-mspowerpoint</td>
</tr>
<tr>
<td>.ppz</td>
<td>application/mspowerpoint</td>
</tr>
<tr>
<td>.pre</td>
<td>application/x-freelance</td>
</tr>
<tr>
<td>.prt</td>
<td>application/pro_eng</td>
</tr>
<tr>
<td>.ps</td>
<td>application/postscript</td>
</tr>
<tr>
<td>.psd</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.pvu</td>
<td>paleovu/x-pv</td>
</tr>
<tr>
<td>.pwz</td>
<td>application/vnd.ms-powerpoint</td>
</tr>
<tr>
<td>.py</td>
<td>text/x-script.phyton</td>
</tr>
<tr>
<td>.pyc</td>
<td>application/x-bytecode.python</td>
</tr>
<tr>
<td>.qcp</td>
<td>audio/vnd.qcelp</td>
</tr>
<tr>
<td>.qd3</td>
<td>x-world/x-3dmf</td>
</tr>
<tr>
<td>.qd3d</td>
<td>x-world/x-3dmf</td>
</tr>
<tr>
<td>.qif</td>
<td>image/x-quicktime</td>
</tr>
<tr>
<td>.qt</td>
<td>video/quicktime</td>
</tr>
<tr>
<td>.qtc</td>
<td>video/x-qtc</td>
</tr>
<tr>
<td>.qti</td>
<td>image/x-quicktime</td>
</tr>
<tr>
<td>.qtif</td>
<td>image/x-quicktime</td>
</tr>
<tr>
<td>.ra</td>
<td>audio/x-pn-realaudio</td>
</tr>
<tr>
<td>.ra</td>
<td>audio/x-pn-realaudio-plugin</td>
</tr>
<tr>
<td>.ra</td>
<td>audio/x-realaudio</td>
</tr>
<tr>
<td>.ram</td>
<td>audio/x-pn-realaudio</td>
</tr>
<tr>
<td>.ras</td>
<td>application/x-cmu-raster</td>
</tr>
<tr>
<td>.ras</td>
<td>image/cmu-raster</td>
</tr>
<tr>
<td>.ras</td>
<td>image/x-cmu-raster</td>
</tr>
<tr>
<td>.rast</td>
<td>image/cmu-raster</td>
</tr>
<tr>
<td>.rexx</td>
<td>text/x-script.rexx</td>
</tr>
<tr>
<td>.rf</td>
<td>image/vnd.rn-realflash</td>
</tr>
<tr>
<td>.rgb</td>
<td>image/x-rgb</td>
</tr>
<tr>
<td>.rm</td>
<td>application/vnd.rn-realmedia</td>
</tr>
<tr>
<td>.rm</td>
<td>audio/x-pn-realaudio</td>
</tr>
<tr>
<td>.rmi</td>
<td>audio/mid</td>
</tr>
<tr>
<td>.rmm</td>
<td>audio/x-pn-realaudio</td>
</tr>
<tr>
<td>.rmp</td>
<td>audio/x-pn-realaudio</td>
</tr>
<tr>
<td>.rmp</td>
<td>audio/x-pn-realaudio-plugin</td>
</tr>
<tr>
<td>.rng</td>
<td>application/ringing-tones</td>
</tr>
<tr>
<td>.rng</td>
<td>application/vnd.nokia.ringing-tone</td>
</tr>
<tr>
<td>.rnx</td>
<td>application/vnd.rn-realplayer</td>
</tr>
<tr>
<td>.roff</td>
<td>application/x-troff</td>
</tr>
<tr>
<td>.rp</td>
<td>image/vnd.rn-realpix</td>
</tr>
<tr>
<td>.rpm</td>
<td>audio/x-pn-realaudio-plugin</td>
</tr>
<tr>
<td>.rt</td>
<td>text/richtext</td>
</tr>
<tr>
<td>.rt</td>
<td>text/vnd.rn-realtext</td>
</tr>
<tr>
<td>.rtf</td>
<td>application/rtf</td>
</tr>
<tr>
<td>.rtf</td>
<td>application/x-rtf</td>
</tr>
<tr>
<td>.rtf</td>
<td>text/richtext</td>
</tr>
<tr>
<td>.rtx</td>
<td>application/rtf</td>
</tr>
<tr>
<td>.rtx</td>
<td>text/richtext</td>
</tr>
<tr>
<td>.rv</td>
<td>video/vnd.rn-realvideo</td>
</tr>
<tr>
<td>.s</td>
<td>text/x-asm</td>
</tr>
<tr>
<td>.s3m</td>
<td>audio/s3m</td>
</tr>
<tr>
<td>.saveme</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.sbk</td>
<td>application/x-tbook</td>
</tr>
<tr>
<td>.scm</td>
<td>application/x-lotusscreencam</td>
</tr>
<tr>
<td>.scm</td>
<td>text/x-script.guile</td>
</tr>
<tr>
<td>.scm</td>
<td>text/x-script.scheme</td>
</tr>
<tr>
<td>.scm</td>
<td>video/x-scm</td>
</tr>
<tr>
<td>.sdml</td>
<td>text/plain</td>
</tr>
<tr>
<td>.sdp</td>
<td>application/sdp</td>
</tr>
<tr>
<td>.sdp</td>
<td>application/x-sdp</td>
</tr>
<tr>
<td>.sdr</td>
<td>application/sounder</td>
</tr>
<tr>
<td>.sea</td>
<td>application/sea</td>
</tr>
<tr>
<td>.sea</td>
<td>application/x-sea</td>
</tr>
<tr>
<td>.set</td>
<td>application/set</td>
</tr>
<tr>
<td>.sgm</td>
<td>text/sgml</td>
</tr>
<tr>
<td>.sgm</td>
<td>text/x-sgml</td>
</tr>
<tr>
<td>.sgml</td>
<td>text/sgml</td>
</tr>
<tr>
<td>.sgml</td>
<td>text/x-sgml</td>
</tr>
<tr>
<td>.sh</td>
<td>application/x-bsh</td>
</tr>
<tr>
<td>.sh</td>
<td>application/x-sh</td>
</tr>
<tr>
<td>.sh</td>
<td>application/x-shar</td>
</tr>
<tr>
<td>.sh</td>
<td>text/x-script.sh</td>
</tr>
<tr>
<td>.shar</td>
<td>application/x-bsh</td>
</tr>
<tr>
<td>.shar</td>
<td>application/x-shar</td>
</tr>
<tr>
<td>.shtml</td>
<td>text/html</td>
</tr>
<tr>
<td>.shtml</td>
<td>text/x-server-parsed-html</td>
</tr>
<tr>
<td>.sid</td>
<td>audio/x-psid</td>
</tr>
<tr>
<td>.sit</td>
<td>application/x-sit</td>
</tr>
<tr>
<td>.sit</td>
<td>application/x-stuffit</td>
</tr>
<tr>
<td>.skd</td>
<td>application/x-koan</td>
</tr>
<tr>
<td>.skm</td>
<td>application/x-koan</td>
</tr>
<tr>
<td>.skp</td>
<td>application/x-koan</td>
</tr>
<tr>
<td>.skt</td>
<td>application/x-koan</td>
</tr>
<tr>
<td>.sl</td>
<td>application/x-seelogo</td>
</tr>
<tr>
<td>.smi</td>
<td>application/smil</td>
</tr>
<tr>
<td>.smil</td>
<td>application/smil</td>
</tr>
<tr>
<td>.snd</td>
<td>audio/basic</td>
</tr>
<tr>
<td>.snd</td>
<td>audio/x-adpcm</td>
</tr>
<tr>
<td>.sol</td>
<td>application/solids</td>
</tr>
<tr>
<td>.spc</td>
<td>application/x-pkcs7-certificates</td>
</tr>
<tr>
<td>.spc</td>
<td>text/x-speech</td>
</tr>
<tr>
<td>.spl</td>
<td>application/futuresplash</td>
</tr>
<tr>
<td>.spr</td>
<td>application/x-sprite</td>
</tr>
<tr>
<td>.sprite</td>
<td>application/x-sprite</td>
</tr>
<tr>
<td>.src</td>
<td>application/x-wais-source</td>
</tr>
<tr>
<td>.ssi</td>
<td>text/x-server-parsed-html</td>
</tr>
<tr>
<td>.ssm</td>
<td>application/streamingmedia</td>
</tr>
<tr>
<td>.sst</td>
<td>application/vnd.ms-pki.certstore</td>
</tr>
<tr>
<td>.step</td>
<td>application/step</td>
</tr>
<tr>
<td>.stl</td>
<td>application/sla</td>
</tr>
<tr>
<td>.stl</td>
<td>application/vnd.ms-pki.stl</td>
</tr>
<tr>
<td>.stl</td>
<td>application/x-navistyle</td>
</tr>
<tr>
<td>.stp</td>
<td>application/step</td>
</tr>
<tr>
<td>.sv4cpio</td>
<td>application/x-sv4cpio</td>
</tr>
<tr>
<td>.sv4crc</td>
<td>application/x-sv4crc</td>
</tr>
<tr>
<td>.svf</td>
<td>image/vnd.dwg</td>
</tr>
<tr>
<td>.svf</td>
<td>image/x-dwg</td>
</tr>
<tr>
<td>.svr</td>
<td>application/x-world</td>
</tr>
<tr>
<td>.svr</td>
<td>x-world/x-svr</td>
</tr>
<tr>
<td>.swf</td>
<td>application/x-shockwave-flash</td>
</tr>
<tr>
<td>.t</td>
<td>application/x-troff</td>
</tr>
<tr>
<td>.talk</td>
<td>text/x-speech</td>
</tr>
<tr>
<td>.tar</td>
<td>application/x-tar</td>
</tr>
<tr>
<td>.tbk</td>
<td>application/toolbook</td>
</tr>
<tr>
<td>.tbk</td>
<td>application/x-tbook</td>
</tr>
<tr>
<td>.tcl</td>
<td>application/x-tcl</td>
</tr>
<tr>
<td>.tcl</td>
<td>text/x-script.tcl</td>
</tr>
<tr>
<td>.tcsh</td>
<td>text/x-script.tcsh</td>
</tr>
<tr>
<td>.tex</td>
<td>application/x-tex</td>
</tr>
<tr>
<td>.texi</td>
<td>application/x-texinfo</td>
</tr>
<tr>
<td>.texinfo</td>
<td>application/x-texinfo</td>
</tr>
<tr>
<td>.text</td>
<td>application/plain</td>
</tr>
<tr>
<td>.text</td>
<td>text/plain</td>
</tr>
<tr>
<td>.tgz</td>
<td>application/gnutar</td>
</tr>
<tr>
<td>.tgz</td>
<td>application/x-compressed</td>
</tr>
<tr>
<td>.tif</td>
<td>image/tiff</td>
</tr>
<tr>
<td>.tif</td>
<td>image/x-tiff</td>
</tr>
<tr>
<td>.tiff</td>
<td>image/tiff</td>
</tr>
<tr>
<td>.tiff</td>
<td>image/x-tiff</td>
</tr>
<tr>
<td>.tr</td>
<td>application/x-troff</td>
</tr>
<tr>
<td>.tsi</td>
<td>audio/tsp-audio</td>
</tr>
<tr>
<td>.tsp</td>
<td>application/dsptype</td>
</tr>
<tr>
<td>.tsp</td>
<td>audio/tsplayer</td>
</tr>
<tr>
<td>.tsv</td>
<td>text/tab-separated-values</td>
</tr>
<tr>
<td>.turbot</td>
<td>image/florian</td>
</tr>
<tr>
<td>.txt</td>
<td>text/plain</td>
</tr>
<tr>
<td>.uil</td>
<td>text/x-uil</td>
</tr>
<tr>
<td>.uni</td>
<td>text/uri-list</td>
</tr>
<tr>
<td>.unis</td>
<td>text/uri-list</td>
</tr>
<tr>
<td>.unv</td>
<td>application/i-deas</td>
</tr>
<tr>
<td>.uri</td>
<td>text/uri-list</td>
</tr>
<tr>
<td>.uris</td>
<td>text/uri-list</td>
</tr>
<tr>
<td>.ustar</td>
<td>application/x-ustar</td>
</tr>
<tr>
<td>.ustar</td>
<td>multipart/x-ustar</td>
</tr>
<tr>
<td>.uu</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.uu</td>
<td>text/x-uuencode</td>
</tr>
<tr>
<td>.uue</td>
<td>text/x-uuencode</td>
</tr>
<tr>
<td>.vcd</td>
<td>application/x-cdlink</td>
</tr>
<tr>
<td>.vcs</td>
<td>text/x-vcalendar</td>
</tr>
<tr>
<td>.vda</td>
<td>application/vda</td>
</tr>
<tr>
<td>.vdo</td>
<td>video/vdo</td>
</tr>
<tr>
<td>.vew</td>
<td>application/groupwise</td>
</tr>
<tr>
<td>.viv</td>
<td>video/vivo</td>
</tr>
<tr>
<td>.viv</td>
<td>video/vnd.vivo</td>
</tr>
<tr>
<td>.vivo</td>
<td>video/vivo</td>
</tr>
<tr>
<td>.vivo</td>
<td>video/vnd.vivo</td>
</tr>
<tr>
<td>.vmd</td>
<td>application/vocaltec-media-desc</td>
</tr>
<tr>
<td>.vmf</td>
<td>application/vocaltec-media-file</td>
</tr>
<tr>
<td>.voc</td>
<td>audio/voc</td>
</tr>
<tr>
<td>.voc</td>
<td>audio/x-voc</td>
</tr>
<tr>
<td>.vos</td>
<td>video/vosaic</td>
</tr>
<tr>
<td>.vox</td>
<td>audio/voxware</td>
</tr>
<tr>
<td>.vqe</td>
<td>audio/x-twinvq-plugin</td>
</tr>
<tr>
<td>.vqf</td>
<td>audio/x-twinvq</td>
</tr>
<tr>
<td>.vql</td>
<td>audio/x-twinvq-plugin</td>
</tr>
<tr>
<td>.vrml</td>
<td>application/x-vrml</td>
</tr>
<tr>
<td>.vrml</td>
<td>model/vrml</td>
</tr>
<tr>
<td>.vrml</td>
<td>x-world/x-vrml</td>
</tr>
<tr>
<td>.vrt</td>
<td>x-world/x-vrt</td>
</tr>
<tr>
<td>.vsd</td>
<td>application/x-visio</td>
</tr>
<tr>
<td>.vst</td>
<td>application/x-visio</td>
</tr>
<tr>
<td>.vsw</td>
<td>application/x-visio</td>
</tr>
<tr>
<td>.w60</td>
<td>application/wordperfect6.0</td>
</tr>
<tr>
<td>.w61</td>
<td>application/wordperfect6.1</td>
</tr>
<tr>
<td>.w6w</td>
<td>application/msword</td>
</tr>
<tr>
<td>.wav</td>
<td>audio/wav</td>
</tr>
<tr>
<td>.wav</td>
<td>audio/x-wav</td>
</tr>
<tr>
<td>.wb1</td>
<td>application/x-qpro</td>
</tr>
<tr>
<td>.wbmp</td>
<td>image/vnd.wap.wbmp</td>
</tr>
<tr>
<td>.web</td>
<td>application/vnd.xara</td>
</tr>
<tr>
<td>.wiz</td>
<td>application/msword</td>
</tr>
<tr>
<td>.wk1</td>
<td>application/x-123</td>
</tr>
<tr>
<td>.wmf</td>
<td>windows/metafile</td>
</tr>
<tr>
<td>.wml</td>
<td>text/vnd.wap.wml</td>
</tr>
<tr>
<td>.wmlc</td>
<td>application/vnd.wap.wmlc</td>
</tr>
<tr>
<td>.wmls</td>
<td>text/vnd.wap.wmlscript</td>
</tr>
<tr>
<td>.wmlsc</td>
<td>application/vnd.wap.wmlscriptc</td>
</tr>
<tr>
<td>.word</td>
<td>application/msword</td>
</tr>
<tr>
<td>.wp</td>
<td>application/wordperfect</td>
</tr>
<tr>
<td>.wp5</td>
<td>application/wordperfect</td>
</tr>
<tr>
<td>.wp5</td>
<td>application/wordperfect6.0</td>
</tr>
<tr>
<td>.wp6</td>
<td>application/wordperfect</td>
</tr>
<tr>
<td>.wpd</td>
<td>application/wordperfect</td>
</tr>
<tr>
<td>.wpd</td>
<td>application/x-wpwin</td>
</tr>
<tr>
<td>.wq1</td>
<td>application/x-lotus</td>
</tr>
<tr>
<td>.wri</td>
<td>application/mswrite</td>
</tr>
<tr>
<td>.wri</td>
<td>application/x-wri</td>
</tr>
<tr>
<td>.wrl</td>
<td>application/x-world</td>
</tr>
<tr>
<td>.wrl</td>
<td>model/vrml</td>
</tr>
<tr>
<td>.wrl</td>
<td>x-world/x-vrml</td>
</tr>
<tr>
<td>.wrz</td>
<td>model/vrml</td>
</tr>
<tr>
<td>.wrz</td>
<td>x-world/x-vrml</td>
</tr>
<tr>
<td>.wsc</td>
<td>text/scriplet</td>
</tr>
<tr>
<td>.wsrc</td>
<td>application/x-wais-source</td>
</tr>
<tr>
<td>.wtk</td>
<td>application/x-wintalk</td>
</tr>
<tr>
<td>.xbm</td>
<td>image/x-xbitmap</td>
</tr>
<tr>
<td>.xbm</td>
<td>image/x-xbm</td>
</tr>
<tr>
<td>.xbm</td>
<td>image/xbm</td>
</tr>
<tr>
<td>.xdr</td>
<td>video/x-amt-demorun</td>
</tr>
<tr>
<td>.xgz</td>
<td>xgl/drawing</td>
</tr>
<tr>
<td>.xif</td>
<td>image/vnd.xiff</td>
</tr>
<tr>
<td>.xl</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xla</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xla</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xla</td>
<td>application/x-msexcel</td>
</tr>
<tr>
<td>.xlb</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xlb</td>
<td>application/vnd.ms-excel</td>
</tr>
<tr>
<td>.xlb</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xlc</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xlc</td>
<td>application/vnd.ms-excel</td>
</tr>
<tr>
<td>.xlc</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xld</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xld</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xlk</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xlk</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xll</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xll</td>
<td>application/vnd.ms-excel</td>
</tr>
<tr>
<td>.xll</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xlm</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xlm</td>
<td>application/vnd.ms-excel</td>
</tr>
<tr>
<td>.xlm</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xls</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xls</td>
<td>application/vnd.ms-excel</td>
</tr>
<tr>
<td>.xls</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xls</td>
<td>application/x-msexcel</td>
</tr>
<tr>
<td>.xlt</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xlt</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xlv</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xlv</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xlw</td>
<td>application/excel</td>
</tr>
<tr>
<td>.xlw</td>
<td>application/vnd.ms-excel</td>
</tr>
<tr>
<td>.xlw</td>
<td>application/x-excel</td>
</tr>
<tr>
<td>.xlw</td>
<td>application/x-msexcel</td>
</tr>
<tr>
<td>.xm</td>
<td>audio/xm</td>
</tr>
<tr>
<td>.xml</td>
<td>application/xml</td>
</tr>
<tr>
<td>.xml</td>
<td>text/xml</td>
</tr>
<tr>
<td>.xmz</td>
<td>xgl/movie</td>
</tr>
<tr>
<td>.xpix</td>
<td>application/x-vnd.ls-xpix</td>
</tr>
<tr>
<td>.xpm</td>
<td>image/x-xpixmap</td>
</tr>
<tr>
<td>.xpm</td>
<td>image/xpm</td>
</tr>
<tr>
<td>.x-png</td>
<td>image/png</td>
</tr>
<tr>
<td>.xsr</td>
<td>video/x-amt-showrun</td>
</tr>
<tr>
<td>.xwd</td>
<td>image/x-xwd</td>
</tr>
<tr>
<td>.xwd</td>
<td>image/x-xwindowdump</td>
</tr>
<tr>
<td>.xyz</td>
<td>chemical/x-pdb</td>
</tr>
<tr>
<td>.z</td>
<td>application/x-compress</td>
</tr>
<tr>
<td>.z</td>
<td>application/x-compressed</td>
</tr>
<tr>
<td>.zip</td>
<td>application/x-compressed</td>
</tr>
<tr>
<td>.zip</td>
<td>application/x-zip-compressed</td>
</tr>
<tr>
<td>.zip</td>
<td>application/zip</td>
</tr>
<tr>
<td>.zip</td>
<td>multipart/x-zip</td>
</tr>
<tr>
<td>.zoo</td>
<td>application/octet-stream</td>
</tr>
<tr>
<td>.zsh</td>
<td>text/x-script.zsh</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* RGB颜色对照表
*/
namespace plugin\dev\rgb_color;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+2318
View File
@@ -0,0 +1,2318 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-12 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">RGB颜色对照表</span>
</div>
<div class="alert alert-info"><em class="icon ni ni-info"></em> 快速查找颜色请按 <span class="badge badge-success">Ctrl+F</span>
</div>
<div class="row">
<div class="col-12 col-md-6">
<table class="table table-hover table-bordered">
<thead>
<th align="center">实色效果</th>
<th align="center">英文名称 </th>
<th align="center">R.G.B </th>
<th align="center">16色</th></thead>
<tbody>
<tr>
<td bgcolor="#fffafa">&nbsp;</td>
<td>Snow </td>
<td>255 250 250 </td>
<td>#FFFAFA</td></tr>
<tr>
<td bgcolor="#f8f8ff">&nbsp;</td>
<td>GhostWhite</td>
<td>248 248 255 </td>
<td>#F8F8FF</td></tr>
<tr>
<td bgcolor="#f5f5f5">&nbsp;</td>
<td>WhiteSmoke</td>
<td>245 245 245 </td>
<td>#F5F5F5</td></tr>
<tr>
<td bgcolor="#dcdcdc">&nbsp;</td>
<td>Gainsboro</td>
<td>220 220 220</td>
<td>#DCDCDC</td>
</tr>
<tr>
<td bgcolor="#fffaf0">&nbsp;</td>
<td>FloralWhite</td>
<td>255 250 240 </td>
<td>#FFFAF0</td></tr>
<tr>
<td bgcolor="#fdf5e6">&nbsp;</td>
<td>OldLace</td>
<td>253 245 230 </td>
<td>#FDF5E6</td></tr>
<tr>
<td bgcolor="#faf0e6">&nbsp;</td>
<td>Linen</td>
<td>250 240 230 </td>
<td>#FAF0E6</td></tr>
<tr>
<td bgcolor="#faebd7">&nbsp;</td>
<td>AntiqueWhite</td>
<td>250 235 215 </td>
<td>#FAEBD7</td></tr>
<tr>
<td bgcolor="#ffefd5">&nbsp;</td>
<td>PapayaWhip</td>
<td>255 239 213 </td>
<td>#FFEFD5</td></tr>
<tr>
<td bgcolor="#ffebcd">&nbsp;</td>
<td>BlanchedAlmond</td>
<td>255 235 205 </td>
<td>#FFEBCD</td></tr>
<tr>
<td bgcolor="#ffe4c4">&nbsp;</td>
<td>Bisque</td>
<td>255 228 196 </td>
<td>#FFE4C4</td></tr>
<tr>
<td bgcolor="#ffdab9">&nbsp;</td>
<td>PeachPuff</td>
<td>255 218 185 </td>
<td>#FFDAB9</td></tr>
<tr>
<td bgcolor="#ffdead">&nbsp;</td>
<td>NavajoWhite</td>
<td>255 222 173 </td>
<td>#FFDEAD</td></tr>
<tr>
<td bgcolor="#ffe4b5">&nbsp;</td>
<td>Moccasin</td>
<td>255 228 181 </td>
<td>#FFE4B5</td></tr>
<tr>
<td bgcolor="#fff8dc">&nbsp;</td>
<td>Cornsilk</td>
<td>255 248 220 </td>
<td>#FFF8DC</td></tr>
<tr>
<td bgcolor="#fffff0">&nbsp;</td>
<td>Ivory</td>
<td>255 255 240 </td>
<td>#FFFFF0</td></tr>
<tr>
<td bgcolor="#fffacd">&nbsp;</td>
<td>LemonChiffon</td>
<td>255 250 205 </td>
<td>#FFFACD</td></tr>
<tr>
<td bgcolor="#fff5ee">&nbsp;</td>
<td>Seashell</td>
<td>255 245 238 </td>
<td>#FFF5EE</td></tr>
<tr>
<td bgcolor="#f0fff0">&nbsp;</td>
<td>Honeydew</td>
<td>240 255 240 </td>
<td>#F0FFF0</td></tr>
<tr>
<td bgcolor="#f5fffa">&nbsp;</td>
<td>MintCream</td>
<td>245 255 250 </td>
<td>#F5FFFA</td></tr>
<tr>
<td bgcolor="#f0ffff">&nbsp;</td>
<td>Azure</td>
<td>240 255 255 </td>
<td>#F0FFFF</td></tr>
<tr>
<td bgcolor="#f0f8ff">&nbsp;</td>
<td>AliceBlue</td>
<td>240 248 255 </td>
<td>#F0F8FF</td></tr>
<tr>
<td bgcolor="#e6e6fa">&nbsp;</td>
<td>lavender</td>
<td>230 230 250 </td>
<td>#E6E6FA</td></tr>
<tr>
<td bgcolor="#fff0f5">&nbsp;</td>
<td>LavenderBlush</td>
<td>255 240 245 </td>
<td>#FFF0F5</td></tr>
<tr>
<td bgcolor="#ffe4e1">&nbsp;</td>
<td>MistyRose</td>
<td>255 228 225 </td>
<td>#FFE4E1</td></tr>
<tr>
<td bgcolor="#ffffff">&nbsp;</td>
<td>White</td>
<td>255 255 255 </td>
<td>#FFFFFF</td></tr>
<tr>
<td bgcolor="#000000">&nbsp;</td>
<td>Black</td>
<td>0 0 0 </td>
<td>#000000</td></tr>
<tr>
<td bgcolor="#2f4f4f">&nbsp;</td>
<td>DarkSlateGray</td>
<td>47 79 79 </td>
<td>#2F4F4F</td></tr>
<tr>
<td bgcolor="#696969">&nbsp;</td>
<td>DimGrey</td>
<td>105 105 105 </td>
<td>#696969</td></tr>
<tr>
<td bgcolor="#708090">&nbsp;</td>
<td>SlateGrey</td>
<td>112 128 144 </td>
<td>#708090</td></tr>
<tr>
<td bgcolor="#778899">&nbsp;</td>
<td>LightSlateGray</td>
<td>119 136 153 </td>
<td>#778899</td></tr>
<tr>
<td bgcolor="#bebebe">&nbsp;</td>
<td>Grey</td>
<td>190 190 190 </td>
<td>#BEBEBE</td></tr>
<tr>
<td bgcolor="#d3d3d3">&nbsp;</td>
<td>LightGray</td>
<td>211 211 211 </td>
<td>#D3D3D3</td></tr>
<tr>
<td bgcolor="#191970">&nbsp;</td>
<td>MidnightBlue</td>
<td>25 25 112 </td>
<td>#191970</td></tr>
<tr>
<td bgcolor="#000080">&nbsp;</td>
<td>NavyBlue</td>
<td>0 0 128 </td>
<td>#000080</td></tr>
<tr>
<td bgcolor="#6495ed">&nbsp;</td>
<td>CornflowerBlue</td>
<td>100 149 237 </td>
<td>#6495ED</td></tr>
<tr>
<td bgcolor="#483d8b">&nbsp;</td>
<td>DarkSlateBlue</td>
<td>72 61 139 </td>
<td>#483D8B</td></tr>
<tr>
<td bgcolor="#6a5acd">&nbsp;</td>
<td>SlateBlue</td>
<td>106 90 205 </td>
<td>#6A5ACD</td></tr>
<tr>
<td bgcolor="#7b68ee">&nbsp;</td>
<td>MediumSlateBlue</td>
<td>123 104 238 </td>
<td>#7B68EE</td></tr>
<tr>
<td bgcolor="#8470ff">&nbsp;</td>
<td>LightSlateBlue</td>
<td>132 112 255 </td>
<td>#8470FF</td></tr>
<tr>
<td bgcolor="#0000cd">&nbsp;</td>
<td>MediumBlue</td>
<td>0 0 205 </td>
<td>#0000CD</td></tr>
<tr>
<td bgcolor="#4169e1">&nbsp;</td>
<td>RoyalBlue</td>
<td>65 105 225 </td>
<td>#4169E1</td></tr>
<tr>
<td bgcolor="#0000ff">&nbsp;</td>
<td>Blue </td>
<td>0 0 255 </td>
<td>#0000FF</td></tr>
<tr>
<td bgcolor="#1e90ff">&nbsp;</td>
<td>DodgerBlue</td>
<td>30 144 255 </td>
<td>#1E90FF</td></tr>
<tr>
<td bgcolor="#00bfff">&nbsp;</td>
<td>DeepSkyBlue</td>
<td>0 191 255 </td>
<td>#00BFFF</td></tr>
<tr>
<td bgcolor="#87ceeb">&nbsp;</td>
<td>SkyBlue</td>
<td>135 206 235 </td>
<td>#87CEEB</td></tr>
<tr>
<td bgcolor="#87cefa">&nbsp;</td>
<td>LightSkyBlue</td>
<td>135 206 250 </td>
<td>#87CEFA</td></tr>
<tr>
<td bgcolor="#4682b4">&nbsp;</td>
<td>SteelBlue</td>
<td>70 130 180 </td>
<td>#4682B4</td></tr>
<tr>
<td bgcolor="#b0c4de">&nbsp;</td>
<td>LightSteelBlue</td>
<td>176 196 222 </td>
<td>#B0C4DE</td></tr>
<tr>
<td bgcolor="#add8e6">&nbsp;</td>
<td>LightBlue</td>
<td>173 216 230 </td>
<td>#ADD8E6</td></tr>
<tr>
<td bgcolor="#b0e0e6">&nbsp;</td>
<td>PowderBlue</td>
<td>176 224 230 </td>
<td>#B0E0E6</td></tr>
<tr>
<td bgcolor="#afeeee">&nbsp;</td>
<td>PaleTurquoise</td>
<td>175 238 238 </td>
<td>#AFEEEE</td></tr>
<tr>
<td bgcolor="#00ced1">&nbsp;</td>
<td>DarkTurquoise</td>
<td>0 206 209 </td>
<td>#00CED1</td></tr>
<tr>
<td bgcolor="#48d1cc">&nbsp;</td>
<td>MediumTurquoise</td>
<td>72 209 204 </td>
<td>#48D1CC</td></tr>
<tr>
<td bgcolor="#40e0d0">&nbsp;</td>
<td>Turquoise</td>
<td>64 224 208 </td>
<td>#40E0D0</td></tr>
<tr>
<td bgcolor="#00ffff">&nbsp;</td>
<td>Cyan </td>
<td>0 255 255 </td>
<td>#00FFFF</td></tr>
<tr>
<td bgcolor="#e0ffff">&nbsp;</td>
<td>LightCyan</td>
<td>224 255 255 </td>
<td>#E0FFFF</td></tr>
<tr>
<td bgcolor="#5f9ea0">&nbsp;</td>
<td>CadetBlue</td>
<td>95 158 160 </td>
<td>#5F9EA0</td></tr>
<tr>
<td bgcolor="#66cdaa">&nbsp;</td>
<td>MediumAquamarine</td>
<td>102 205 170 </td>
<td>#66CDAA</td></tr>
<tr>
<td bgcolor="#7fffd4">&nbsp;</td>
<td>Aquamarine</td>
<td>127 255 212 </td>
<td>#7FFFD4</td></tr>
<tr>
<td bgcolor="#006400">&nbsp;</td>
<td>DarkGreen</td>
<td>0 100 0 </td>
<td>#006400</td></tr>
<tr>
<td bgcolor="#556b2f">&nbsp;</td>
<td>DarkOliveGreen</td>
<td>85 107 47 </td>
<td>#556B2F</td></tr>
<tr>
<td bgcolor="#8fbc8f">&nbsp;</td>
<td>DarkSeaGreen</td>
<td>143 188 143 </td>
<td>#8FBC8F</td></tr>
<tr>
<td bgcolor="#2e8b57">&nbsp;</td>
<td>SeaGreen</td>
<td>46 139 87 </td>
<td>#2E8B57</td></tr>
<tr>
<td bgcolor="#3cb371">&nbsp;</td>
<td>MediumSeaGreen</td>
<td>60 179 113 </td>
<td>#3CB371</td></tr>
<tr>
<td bgcolor="#20b2aa">&nbsp;</td>
<td>LightSeaGreen</td>
<td>32 178 170 </td>
<td>#20B2AA</td></tr>
<tr>
<td bgcolor="#98fb98">&nbsp;</td>
<td>PaleGreen</td>
<td>152 251 152 </td>
<td>#98FB98</td></tr>
<tr>
<td bgcolor="#00ff7f">&nbsp;</td>
<td>SpringGreen</td>
<td>0 255 127 </td>
<td>#00FF7F</td></tr>
<tr>
<td bgcolor="#7cfc00">&nbsp;</td>
<td>LawnGreen</td>
<td>124 252 0 </td>
<td>#7CFC00</td></tr>
<tr>
<td bgcolor="#00ff00">&nbsp;</td>
<td>Green</td>
<td>0 255 0 </td>
<td>#00FF00</td></tr>
<tr>
<td bgcolor="#7fff00">&nbsp;</td>
<td>Chartreuse</td>
<td>127 255 0 </td>
<td>#7FFF00</td></tr>
<tr>
<td bgcolor="#00fa9a">&nbsp;</td>
<td>MedSpringGreen</td>
<td>0 250 154 </td>
<td>#00FA9A</td></tr>
<tr>
<td bgcolor="#adff2f">&nbsp;</td>
<td>GreenYellow</td>
<td>173 255 47 </td>
<td>#ADFF2F</td></tr>
<tr>
<td bgcolor="#32cd32">&nbsp;</td>
<td>LimeGreen</td>
<td>50 205 50 </td>
<td>#32CD32</td></tr>
<tr>
<td bgcolor="#9acd32">&nbsp;</td>
<td>YellowGreen</td>
<td>154 205 50 </td>
<td>#9ACD32</td></tr>
<tr>
<td bgcolor="#228b22">&nbsp;</td>
<td>ForestGreen</td>
<td>34 139 34 </td>
<td>#228B22</td></tr>
<tr>
<td bgcolor="#6b8e23">&nbsp;</td>
<td>OliveDrab</td>
<td>107 142 35 </td>
<td>#6B8E23</td></tr>
<tr>
<td bgcolor="#bdb76b">&nbsp;</td>
<td>DarkKhaki</td>
<td>189 183 107 </td>
<td>#BDB76B</td></tr>
<tr>
<td bgcolor="#eee8aa">&nbsp;</td>
<td>PaleGoldenrod</td>
<td>238 232 170 </td>
<td>#EEE8AA</td></tr>
<tr>
<td bgcolor="#fafad2">&nbsp;</td>
<td>LtGoldenrodYello</td>
<td>250 250 210 </td>
<td>#FAFAD2</td></tr>
<tr>
<td bgcolor="#ffffe0">&nbsp;</td>
<td>LightYellow</td>
<td>255 255 224 </td>
<td>#FFFFE0</td></tr>
<tr>
<td bgcolor="#ffff00">&nbsp;</td>
<td>Yellow</td>
<td>255 255 0 </td>
<td>#FFFF00</td></tr>
<tr>
<td bgcolor="#ffd700">&nbsp;</td>
<td>Gold </td>
<td>255 215 0 </td>
<td>#FFD700</td></tr>
<tr>
<td bgcolor="#eedd82">&nbsp;</td>
<td>LightGoldenrod</td>
<td>238 221 130 </td>
<td>#EEDD82</td></tr>
<tr>
<td bgcolor="#daa520">&nbsp;</td>
<td>goldenrod</td>
<td>218 165 32 </td>
<td>#DAA520</td></tr>
<tr>
<td bgcolor="#b8860b">&nbsp;</td>
<td>DarkGoldenrod</td>
<td>184 134 11 </td>
<td>#B8860B</td></tr>
<tr>
<td bgcolor="#bc8f8f">&nbsp;</td>
<td>RosyBrown</td>
<td>188 143 143 </td>
<td>#BC8F8F</td></tr>
<tr>
<td bgcolor="#cd5c5c">&nbsp;</td>
<td>IndianRed</td>
<td>205 92 92 </td>
<td>#CD5C5C</td></tr>
<tr>
<td bgcolor="#8b4513">&nbsp;</td>
<td>SaddleBrown</td>
<td>139 69 19 </td>
<td>#8B4513</td></tr>
<tr>
<td bgcolor="#a0522d">&nbsp;</td>
<td>Sienna</td>
<td>160 82 45 </td>
<td>#A0522D</td></tr>
<tr>
<td bgcolor="#cd853f">&nbsp;</td>
<td>Peru </td>
<td>205 133 63 </td>
<td>#CD853F</td></tr>
<tr>
<td bgcolor="#deb887">&nbsp;</td>
<td>Burlywood</td>
<td>222 184 135 </td>
<td>#DEB887</td></tr>
<tr>
<td bgcolor="#f5f5dc">&nbsp;</td>
<td>Beige</td>
<td>245 245 220 </td>
<td>#F5F5DC</td></tr>
<tr>
<td bgcolor="#f5deb3">&nbsp;</td>
<td>Wheat</td>
<td>245 222 179 </td>
<td>#F5DEB3</td></tr>
<tr>
<td bgcolor="#f4a460">&nbsp;</td>
<td>SandyBrown</td>
<td>244 164 96 </td>
<td>#F4A460</td></tr>
<tr>
<td bgcolor="#d2b48c">&nbsp;</td>
<td>Tan </td>
<td>210 180 140 </td>
<td>#D2B48C</td></tr>
<tr>
<td bgcolor="#d2691e">&nbsp;</td>
<td>Chocolate</td>
<td>210 105 30 </td>
<td>#D2691E</td></tr>
<tr>
<td bgcolor="#b22222">&nbsp;</td>
<td>Firebrick</td>
<td>178 34 34 </td>
<td>#B22222</td></tr>
<tr>
<td bgcolor="#a52a2a">&nbsp;</td>
<td>Brown</td>
<td>165 42 42 </td>
<td>#A52A2A</td></tr>
<tr>
<td bgcolor="#e9967a">&nbsp;</td>
<td>DarkSalmon</td>
<td>233 150 122 </td>
<td>#E9967A</td></tr>
<tr>
<td bgcolor="#fa8072">&nbsp;</td>
<td>Salmon</td>
<td>250 128 114 </td>
<td>#FA8072</td></tr>
<tr>
<td bgcolor="#ffa07a">&nbsp;</td>
<td>LightSalmon</td>
<td>255 160 122 </td>
<td>#FFA07A</td></tr>
<tr>
<td bgcolor="#ffa500">&nbsp;</td>
<td>Orange</td>
<td>255 165 0 </td>
<td>#FFA500</td></tr>
<tr>
<td bgcolor="#ff8c00">&nbsp;</td>
<td>DarkOrange</td>
<td>255 140 0 </td>
<td>#FF8C00</td></tr>
<tr>
<td bgcolor="#ff7f50">&nbsp;</td>
<td>Coral</td>
<td>255 127 80 </td>
<td>#FF7F50</td></tr>
<tr>
<td bgcolor="#f08080">&nbsp;</td>
<td>LightCoral</td>
<td>240 128 128 </td>
<td>#F08080</td></tr>
<tr>
<td bgcolor="#ff6347">&nbsp;</td>
<td>Tomato</td>
<td>255 99 71 </td>
<td>#FF6347</td></tr>
<tr>
<td bgcolor="#ff4500">&nbsp;</td>
<td>OrangeRed</td>
<td>255 69 0 </td>
<td>#FF4500</td></tr>
<tr>
<td bgcolor="#ff0000">&nbsp;</td>
<td>Red </td>
<td>255 0 0 </td>
<td>#FF0000</td></tr>
<tr>
<td bgcolor="#ff69b4">&nbsp;</td>
<td>HotPink</td>
<td>255 105 180 </td>
<td>#FF69B4</td></tr>
<tr>
<td bgcolor="#ff1493">&nbsp;</td>
<td>DeepPink</td>
<td>255 20 147 </td>
<td>#FF1493</td></tr>
<tr>
<td bgcolor="#ffc0cb">&nbsp;</td>
<td>Pink </td>
<td>255 192 203 </td>
<td>#FFC0CB</td></tr>
<tr>
<td bgcolor="#ffb6c1">&nbsp;</td>
<td>LightPink</td>
<td>255 182 193 </td>
<td>#FFB6C1</td></tr>
<tr>
<td bgcolor="#db7093">&nbsp;</td>
<td>PaleVioletRed</td>
<td>219 112 147 </td>
<td>#DB7093</td></tr>
<tr>
<td bgcolor="#b03060">&nbsp;</td>
<td>Maroon</td>
<td>176 48 96 </td>
<td>#B03060</td></tr>
<tr>
<td bgcolor="#c71585">&nbsp;</td>
<td>MediumVioletRed</td>
<td>199 21 133 </td>
<td>#C71585</td></tr>
<tr>
<td bgcolor="#d02090">&nbsp;</td>
<td>VioletRed</td>
<td>208 32 144 </td>
<td>#D02090</td></tr>
<tr>
<td bgcolor="#ff00ff">&nbsp;</td>
<td>Magenta</td>
<td>255 0 255 </td>
<td>#FF00FF</td></tr>
<tr>
<td bgcolor="#ee82ee">&nbsp;</td>
<td>Violet</td>
<td>238 130 238 </td>
<td>#EE82EE</td></tr>
<tr>
<td bgcolor="#dda0dd">&nbsp;</td>
<td>Plum </td>
<td>221 160 221 </td>
<td>#DDA0DD</td></tr>
<tr>
<td bgcolor="#da70d6">&nbsp;</td>
<td>Orchid</td>
<td>218 112 214 </td>
<td>#DA70D6</td></tr>
<tr>
<td bgcolor="#ba55d3">&nbsp;</td>
<td>MediumOrchid</td>
<td>186 85 211 </td>
<td>#BA55D3</td></tr>
<tr>
<td bgcolor="#9932cc">&nbsp;</td>
<td>DarkOrchid</td>
<td>153 50 204 </td>
<td>#9932CC</td></tr>
<tr>
<td bgcolor="#9400d3">&nbsp;</td>
<td>DarkViolet</td>
<td>148 0 211 </td>
<td>#9400D3</td></tr>
<tr>
<td bgcolor="#8a2be2">&nbsp;</td>
<td>BlueViolet</td>
<td>138 43 226 </td>
<td>#8A2BE2</td></tr>
<tr>
<td bgcolor="#a020f0">&nbsp;</td>
<td>Purple</td>
<td>160 32 240 </td>
<td>#A020F0</td></tr>
<tr>
<td bgcolor="#9370db">&nbsp;</td>
<td>MediumPurple</td>
<td>147 112 219 </td>
<td>#9370DB</td></tr>
<tr>
<td bgcolor="#d8bfd8">&nbsp;</td>
<td>Thistle</td>
<td>216 191 216 </td>
<td>#D8BFD8</td></tr>
<tr>
<td bgcolor="#fffafa">&nbsp;</td>
<td>Snow1</td>
<td>255 250 250 </td>
<td>#FFFAFA</td></tr>
<tr>
<td bgcolor="#eee9e9">&nbsp;</td>
<td>Snow2</td>
<td>238 233 233 </td>
<td>#EEE9E9</td></tr>
<tr>
<td bgcolor="#cdc9c9">&nbsp;</td>
<td>Snow3</td>
<td>205 201 201 </td>
<td>#CDC9C9</td></tr>
<tr>
<td bgcolor="#8b8989">&nbsp;</td>
<td>Snow4</td>
<td>139 137 137 </td>
<td>#8B8989</td></tr>
<tr>
<td bgcolor="#fff5ee">&nbsp;</td>
<td>Seashell1</td>
<td>255 245 238 </td>
<td>#FFF5EE</td></tr>
<tr>
<td bgcolor="#eee5de">&nbsp;</td>
<td>Seashell2</td>
<td>238 229 222 </td>
<td>#EEE5DE</td></tr>
<tr>
<td bgcolor="#cdc5bf">&nbsp;</td>
<td>Seashell3</td>
<td>205 197 191 </td>
<td>#CDC5BF</td></tr>
<tr>
<td bgcolor="#8b8682">&nbsp;</td>
<td>Seashell4</td>
<td>139 134 130 </td>
<td>#8B8682</td></tr>
<tr>
<td bgcolor="#ffefdb">&nbsp;</td>
<td>AntiqueWhite1</td>
<td>255 239 219 </td>
<td>#FFEFDB</td></tr>
<tr>
<td bgcolor="#eedfcc">&nbsp;</td>
<td>AntiqueWhite2</td>
<td>238 223 204 </td>
<td>#EEDFCC</td></tr>
<tr>
<td bgcolor="#cdc0b0">&nbsp;</td>
<td>AntiqueWhite3</td>
<td>205 192 176 </td>
<td>#CDC0B0</td></tr>
<tr>
<td bgcolor="#8b8378">&nbsp;</td>
<td>AntiqueWhite4</td>
<td>139 131 120 </td>
<td>#8B8378</td></tr>
<tr>
<td bgcolor="#ffe4c4">&nbsp;</td>
<td>Bisque1</td>
<td>255 228 196 </td>
<td>#FFE4C4</td></tr>
<tr>
<td bgcolor="#eed5b7">&nbsp;</td>
<td>Bisque2</td>
<td>238 213 183 </td>
<td>#EED5B7</td></tr>
<tr>
<td bgcolor="#cdb79e">&nbsp;</td>
<td>Bisque3</td>
<td>205 183 158 </td>
<td>#CDB79E</td></tr>
<tr>
<td bgcolor="#8b7d6b">&nbsp;</td>
<td>Bisque4</td>
<td>139 125 107 </td>
<td>#8B7D6B</td></tr>
<tr>
<td bgcolor="#ffdab9">&nbsp;</td>
<td>PeachPuff1</td>
<td>255 218 185 </td>
<td>#FFDAB9</td></tr>
<tr>
<td bgcolor="#eecbad">&nbsp;</td>
<td>PeachPuff2</td>
<td>238 203 173 </td>
<td>#EECBAD</td></tr>
<tr>
<td bgcolor="#cdaf95">&nbsp;</td>
<td>PeachPuff3</td>
<td>205 175 149 </td>
<td>#CDAF95</td></tr>
<tr>
<td bgcolor="#8b7765">&nbsp;</td>
<td>PeachPuff4</td>
<td>139 119 101 </td>
<td>#8B7765</td></tr>
<tr>
<td bgcolor="#ffdead">&nbsp;</td>
<td>NavajoWhite1</td>
<td>255 222 173 </td>
<td>#FFDEAD</td></tr>
<tr>
<td bgcolor="#eecfa1">&nbsp;</td>
<td>NavajoWhite2</td>
<td>238 207 161 </td>
<td>#EECFA1</td></tr>
<tr>
<td bgcolor="#cdb38b">&nbsp;</td>
<td>NavajoWhite3</td>
<td>205 179 139 </td>
<td>#CDB38B</td></tr>
<tr>
<td bgcolor="#8b795e">&nbsp;</td>
<td>NavajoWhite4</td>
<td>139 121 94 </td>
<td>#8B795E</td></tr>
<tr>
<td bgcolor="#fffacd">&nbsp;</td>
<td>LemonChiffon1</td>
<td>255 250 205 </td>
<td>#FFFACD</td></tr>
<tr>
<td bgcolor="#eee9bf">&nbsp;</td>
<td>LemonChiffon2</td>
<td>238 233 191 </td>
<td>#EEE9BF</td></tr>
<tr>
<td bgcolor="#cdc9a5">&nbsp;</td>
<td>LemonChiffon3</td>
<td>205 201 165 </td>
<td>#CDC9A5</td></tr>
<tr>
<td bgcolor="#8b8970">&nbsp;</td>
<td>LemonChiffon4</td>
<td>139 137 112 </td>
<td>#8B8970</td></tr>
<tr>
<td bgcolor="#fff8dc">&nbsp;</td>
<td>Cornsilk1</td>
<td>255 248 220 </td>
<td>#FFF8DC</td></tr>
<tr>
<td bgcolor="#eee8cd">&nbsp;</td>
<td>Cornsilk2</td>
<td>238 232 205 </td>
<td>#EEE8CD</td></tr>
<tr>
<td bgcolor="#cdc8b1">&nbsp;</td>
<td>Cornsilk3</td>
<td>205 200 177 </td>
<td>#CDC8B1</td></tr>
<tr>
<td bgcolor="#8b8878">&nbsp;</td>
<td>Cornsilk4</td>
<td>139 136 120 </td>
<td>#8B8878</td></tr>
<tr>
<td bgcolor="#fffff0">&nbsp;</td>
<td>Ivory1</td>
<td>255 255 240 </td>
<td>#FFFFF0</td></tr>
<tr>
<td bgcolor="#eeeee0">&nbsp;</td>
<td>Ivory2</td>
<td>238 238 224 </td>
<td>#EEEEE0</td></tr>
<tr>
<td bgcolor="#cdcdc1">&nbsp;</td>
<td>Ivory3</td>
<td>205 205 193 </td>
<td>#CDCDC1</td></tr>
<tr>
<td bgcolor="#8b8b83">&nbsp;</td>
<td>Ivory4</td>
<td>139 139 131 </td>
<td>#8B8B83</td></tr>
<tr>
<td bgcolor="#f0fff0">&nbsp;</td>
<td>Honeydew1</td>
<td>240 255 240 </td>
<td>#F0FFF0</td></tr>
<tr>
<td bgcolor="#e0eee0">&nbsp;</td>
<td>Honeydew2</td>
<td>224 238 224 </td>
<td>#E0EEE0</td></tr>
<tr>
<td bgcolor="#c1cdc1">&nbsp;</td>
<td>Honeydew3</td>
<td>193 205 193 </td>
<td>#C1CDC1</td></tr>
<tr>
<td bgcolor="#838b83">&nbsp;</td>
<td>Honeydew4</td>
<td>131 139 131 </td>
<td>#838B83</td></tr>
<tr>
<td bgcolor="#fff0f5">&nbsp;</td>
<td>LavenderBlush1</td>
<td>255 240 245 </td>
<td>#FFF0F5</td></tr>
<tr>
<td bgcolor="#eee0e5">&nbsp;</td>
<td>LavenderBlush2</td>
<td>238 224 229 </td>
<td>#EEE0E5</td></tr>
<tr>
<td bgcolor="#cdc1c5">&nbsp;</td>
<td>LavenderBlush3</td>
<td>205 193 197 </td>
<td>#CDC1C5</td></tr>
<tr>
<td bgcolor="#8b8386">&nbsp;</td>
<td>LavenderBlush4</td>
<td>139 131 134 </td>
<td>#8B8386</td></tr>
<tr>
<td bgcolor="#ffe4e1">&nbsp;</td>
<td>MistyRose1</td>
<td>255 228 225 </td>
<td>#FFE4E1</td></tr>
<tr>
<td bgcolor="#eed5d2">&nbsp;</td>
<td>MistyRose2</td>
<td>238 213 210 </td>
<td>#EED5D2</td></tr>
<tr>
<td bgcolor="#cdb7b5">&nbsp;</td>
<td>MistyRose3</td>
<td>205 183 181 </td>
<td>#CDB7B5</td></tr>
<tr>
<td bgcolor="#8b7d7b">&nbsp;</td>
<td>MistyRose4</td>
<td>139 125 123 </td>
<td>#8B7D7B</td></tr>
<tr>
<td bgcolor="#f0ffff">&nbsp;</td>
<td>Azure1</td>
<td>240 255 255 </td>
<td>#F0FFFF</td></tr>
<tr>
<td bgcolor="#e0eeee">&nbsp;</td>
<td>Azure2</td>
<td>224 238 238 </td>
<td>#E0EEEE</td></tr>
<tr>
<td bgcolor="#c1cdcd">&nbsp;</td>
<td>Azure3</td>
<td>193 205 205 </td>
<td>#C1CDCD</td></tr>
<tr>
<td bgcolor="#838b8b">&nbsp;</td>
<td>Azure4</td>
<td>131 139 139 </td>
<td>#838B8B</td></tr>
<tr>
<td bgcolor="#836fff">&nbsp;</td>
<td>SlateBlue1</td>
<td>131 111 255 </td>
<td>#836FFF</td></tr>
<tr>
<td bgcolor="#7a67ee">&nbsp;</td>
<td>SlateBlue2</td>
<td>122 103 238 </td>
<td>#7A67EE</td></tr>
<tr>
<td bgcolor="#6959cd">&nbsp;</td>
<td>SlateBlue3</td>
<td>105 89 205 </td>
<td>#6959CD</td></tr>
<tr>
<td bgcolor="#473c8b">&nbsp;</td>
<td>SlateBlue4</td>
<td>71 60 139 </td>
<td>#473C8B</td></tr>
<tr>
<td bgcolor="#4876ff">&nbsp;</td>
<td>RoyalBlue1</td>
<td>72 118 255 </td>
<td>#4876FF</td></tr>
<tr>
<td bgcolor="#436eee">&nbsp;</td>
<td>RoyalBlue2</td>
<td>67 110 238 </td>
<td>#436EEE</td></tr>
<tr>
<td bgcolor="#3a5fcd">&nbsp;</td>
<td>RoyalBlue3</td>
<td>58 95 205 </td>
<td>#3A5FCD</td></tr>
<tr>
<td bgcolor="#27408b">&nbsp;</td>
<td>RoyalBlue4</td>
<td>39 64 139 </td>
<td>#27408B</td></tr>
<tr>
<td bgcolor="#0000ff">&nbsp;</td>
<td>Blue1</td>
<td>0 0 255 </td>
<td>#0000FF</td></tr>
<tr>
<td bgcolor="#0000ee">&nbsp;</td>
<td>Blue2</td>
<td>0 0 238 </td>
<td>#0000EE</td></tr>
<tr>
<td bgcolor="#0000cd">&nbsp;</td>
<td>Blue3</td>
<td>0 0 205 </td>
<td>#0000CD</td></tr>
<tr>
<td bgcolor="#00008b">&nbsp;</td>
<td>Blue4</td>
<td>0 0 139 </td>
<td>#00008B</td></tr>
<tr>
<td bgcolor="#1e90ff">&nbsp;</td>
<td>DodgerBlue1</td>
<td>30 144 255 </td>
<td>#1E90FF</td></tr>
<tr>
<td bgcolor="#1c86ee">&nbsp;</td>
<td>DodgerBlue2</td>
<td>28 134 238 </td>
<td>#1C86EE</td></tr>
<tr>
<td bgcolor="#1874cd">&nbsp;</td>
<td>DodgerBlue3</td>
<td>24 116 205 </td>
<td>#1874CD</td></tr>
<tr>
<td bgcolor="#104e8b">&nbsp;</td>
<td>DodgerBlue4</td>
<td>16 78 139 </td>
<td>#104E8B</td></tr>
<tr>
<td bgcolor="#63b8ff">&nbsp;</td>
<td>SteelBlue1</td>
<td>99 184 255 </td>
<td>#63B8FF</td></tr>
<tr>
<td bgcolor="#5cacee">&nbsp;</td>
<td>SteelBlue2</td>
<td>92 172 238 </td>
<td>#5CACEE</td></tr>
<tr>
<td bgcolor="#4f94cd">&nbsp;</td>
<td>SteelBlue3</td>
<td>79 148 205 </td>
<td>#4F94CD</td></tr>
<tr>
<td bgcolor="#36648b">&nbsp;</td>
<td>SteelBlue4</td>
<td>54 100 139 </td>
<td>#36648B</td></tr>
<tr>
<td bgcolor="#00bfff">&nbsp;</td>
<td>DeepSkyBlue1</td>
<td>0 191 255 </td>
<td>#00BFFF</td></tr>
<tr>
<td bgcolor="#00b2ee">&nbsp;</td>
<td>DeepSkyBlue2</td>
<td>0 178 238 </td>
<td>#00B2EE</td></tr>
<tr>
<td bgcolor="#009acd">&nbsp;</td>
<td>DeepSkyBlue3</td>
<td>0 154 205 </td>
<td>#009ACD</td></tr>
<tr>
<td bgcolor="#00688b">&nbsp;</td>
<td>DeepSkyBlue4</td>
<td>0 104 139 </td>
<td>#00688B</td></tr>
<tr>
<td bgcolor="#87ceff">&nbsp;</td>
<td>SkyBlue1</td>
<td>135 206 255 </td>
<td>#87CEFF</td></tr>
<tr>
<td bgcolor="#7ec0ee">&nbsp;</td>
<td>SkyBlue2</td>
<td>126 192 238 </td>
<td>#7EC0EE</td></tr>
<tr>
<td bgcolor="#6ca6cd">&nbsp;</td>
<td>SkyBlue3</td>
<td>108 166 205 </td>
<td>#6CA6CD</td></tr>
<tr>
<td bgcolor="#4a708b">&nbsp;</td>
<td>SkyBlue4</td>
<td>74 112 139 </td>
<td>#4A708B</td></tr>
<tr>
<td bgcolor="#b0e2ff">&nbsp;</td>
<td>LightSkyBlue1</td>
<td>176 226 255 </td>
<td>#B0E2FF</td></tr>
<tr>
<td bgcolor="#a4d3ee">&nbsp;</td>
<td>LightSkyBlue2</td>
<td>164 211 238 </td>
<td>#A4D3EE</td></tr>
<tr>
<td bgcolor="#8db6cd">&nbsp;</td>
<td>LightSkyBlue3</td>
<td>141 182 205 </td>
<td>#8DB6CD</td></tr>
<tr>
<td bgcolor="#607b8b">&nbsp;</td>
<td>LightSkyBlue4</td>
<td>96 123 139 </td>
<td>#607B8B</td></tr>
<tr>
<td bgcolor="#c6e2ff">&nbsp;</td>
<td>SlateGray1</td>
<td>198 226 255 </td>
<td>#C6E2FF</td></tr>
<tr>
<td bgcolor="#b9d3ee">&nbsp;</td>
<td>SlateGray2</td>
<td>185 211 238 </td>
<td>#B9D3EE</td></tr>
<tr>
<td bgcolor="#9fb6cd">&nbsp;</td>
<td>SlateGray3</td>
<td>159 182 205 </td>
<td>#9FB6CD</td></tr>
<tr>
<td bgcolor="#6c7b8b">&nbsp;</td>
<td>SlateGray4</td>
<td>108 123 139 </td>
<td>#6C7B8B</td></tr>
<tr>
<td bgcolor="#cae1ff">&nbsp;</td>
<td>LightSteelBlue1</td>
<td>202 225 255 </td>
<td>#CAE1FF</td></tr>
<tr>
<td bgcolor="#bcd2ee">&nbsp;</td>
<td>LightSteelBlue2</td>
<td>188 210 238 </td>
<td>#BCD2EE</td></tr>
<tr>
<td bgcolor="#a2b5cd">&nbsp;</td>
<td>LightSteelBlue3</td>
<td>162 181 205 </td>
<td>#A2B5CD</td></tr>
<tr>
<td bgcolor="#6e7b8b">&nbsp;</td>
<td>LightSteelBlue4</td>
<td>110 123 139 </td>
<td>#6E7B8B</td></tr>
<tr>
<td bgcolor="#bfefff">&nbsp;</td>
<td>LightBlue1</td>
<td>191 239 255 </td>
<td>#BFEFFF</td></tr>
<tr>
<td bgcolor="#b2dfee">&nbsp;</td>
<td>LightBlue2</td>
<td>178 223 238 </td>
<td>#B2DFEE</td></tr>
<tr>
<td bgcolor="#9ac0cd">&nbsp;</td>
<td>LightBlue3</td>
<td>154 192 205 </td>
<td>#9AC0CD</td></tr>
<tr>
<td bgcolor="#68838b">&nbsp;</td>
<td>LightBlue4</td>
<td>104 131 139 </td>
<td>#68838B</td></tr>
<tr>
<td bgcolor="#e0ffff">&nbsp;</td>
<td>LightCyan1</td>
<td>224 255 255 </td>
<td>#E0FFFF</td></tr>
<tr>
<td bgcolor="#d1eeee">&nbsp;</td>
<td>LightCyan2</td>
<td>209 238 238 </td>
<td>#D1EEEE</td></tr>
<tr>
<td height="27" bgcolor="#b4cdcd">&nbsp;</td>
<td>LightCyan3</td>
<td>180 205 205 </td>
<td>#B4CDCD</td></tr>
<tr>
<td height="27" bgcolor="#7a8b8b">&nbsp;</td>
<td>LightCyan4</td>
<td>122 139 139 </td>
<td>#7A8B8B</td></tr>
</tbody></table>
</div>
<div class="col-12 col-md-6">
<table class="table table-hover table-bordered">
<thead>
<th align="center">实色效果</th>
<th align="center">英文名称 </th>
<th align="center">R.G.B </th>
<th align="center">16色</th></thead>
<tbody>
<tr>
<td bgcolor="#bbffff">&nbsp;</td>
<td>PaleTurquoise1</td>
<td>187 255 255 </td>
<td>#BBFFFF</td></tr>
<tr>
<td bgcolor="#aeeeee">&nbsp;</td>
<td>PaleTurquoise2</td>
<td>174 238 238 </td>
<td>#AEEEEE</td></tr>
<tr>
<td bgcolor="#96cdcd">&nbsp;</td>
<td>PaleTurquoise3</td>
<td>150 205 205 </td>
<td>#96CDCD</td></tr>
<tr>
<td bgcolor="#668b8b">&nbsp;</td>
<td>PaleTurquoise4</td>
<td>102 139 139 </td>
<td>#668B8B</td></tr>
<tr>
<td bgcolor="#98f5ff">&nbsp;</td>
<td>CadetBlue1</td>
<td>152 245 255 </td>
<td>#98F5FF</td></tr>
<tr>
<td bgcolor="#8ee5ee">&nbsp;</td>
<td>CadetBlue2</td>
<td>142 229 238 </td>
<td>#8EE5EE</td></tr>
<tr>
<td bgcolor="#7ac5cd">&nbsp;</td>
<td>CadetBlue3</td>
<td>122 197 205 </td>
<td>#7AC5CD</td></tr>
<tr>
<td bgcolor="#53868b">&nbsp;</td>
<td>CadetBlue4</td>
<td>83 134 139 </td>
<td>#53868B</td></tr>
<tr>
<td bgcolor="#00f5ff">&nbsp;</td>
<td>Turquoise1</td>
<td>0 245 255 </td>
<td>#00F5FF</td></tr>
<tr>
<td bgcolor="#00e5ee">&nbsp;</td>
<td>Turquoise2</td>
<td>0 229 238 </td>
<td>#00E5EE</td></tr>
<tr>
<td bgcolor="#00c5cd">&nbsp;</td>
<td>Turquoise3</td>
<td>0 197 205 </td>
<td>#00C5CD</td></tr>
<tr>
<td bgcolor="#00868b">&nbsp;</td>
<td>Turquoise4</td>
<td>0 134 139 </td>
<td>#00868B</td></tr>
<tr>
<td bgcolor="#00ffff">&nbsp;</td>
<td>Cyan1</td>
<td>0 255 255 </td>
<td>#00FFFF</td></tr>
<tr>
<td bgcolor="#00eeee">&nbsp;</td>
<td>Cyan2</td>
<td>0 238 238 </td>
<td>#00EEEE</td></tr>
<tr>
<td bgcolor="#00cdcd">&nbsp;</td>
<td>Cyan3</td>
<td>0 205 205 </td>
<td>#00CDCD</td></tr>
<tr>
<td bgcolor="#008b8b">&nbsp;</td>
<td>Cyan4</td>
<td>0 139 139 </td>
<td>#008B8B</td></tr>
<tr>
<td bgcolor="#97ffff">&nbsp;</td>
<td>DarkSlateGray1</td>
<td>151 255 255 </td>
<td>#97FFFF</td></tr>
<tr>
<td bgcolor="#8deeee">&nbsp;</td>
<td>DarkSlateGray2</td>
<td>141 238 238 </td>
<td>#8DEEEE</td></tr>
<tr>
<td bgcolor="#79cdcd">&nbsp;</td>
<td>DarkSlateGray3</td>
<td>121 205 205 </td>
<td>#79CDCD</td></tr>
<tr>
<td bgcolor="#528b8b">&nbsp;</td>
<td>DarkSlateGray4</td>
<td>82 139 139 </td>
<td>#528B8B</td></tr>
<tr>
<td bgcolor="#7fffd4">&nbsp;</td>
<td>Aquamarine1</td>
<td>127 255 212 </td>
<td>#7FFFD4</td></tr>
<tr>
<td bgcolor="#76eec6">&nbsp;</td>
<td>Aquamarine2</td>
<td>118 238 198 </td>
<td>#76EEC6</td></tr>
<tr>
<td bgcolor="#66cdaa">&nbsp;</td>
<td>Aquamarine3</td>
<td>102 205 170 </td>
<td>#66CDAA</td></tr>
<tr>
<td bgcolor="#458b74">&nbsp;</td>
<td>Aquamarine4</td>
<td>69 139 116 </td>
<td>#458B74</td></tr>
<tr>
<td bgcolor="#c1ffc1">&nbsp;</td>
<td>DarkSeaGreen1</td>
<td>193 255 193 </td>
<td>#C1FFC1</td></tr>
<tr>
<td bgcolor="#b4eeb4">&nbsp;</td>
<td>DarkSeaGreen2</td>
<td>180 238 180 </td>
<td>#B4EEB4</td></tr>
<tr>
<td bgcolor="#9bcd9b">&nbsp;</td>
<td>DarkSeaGreen3</td>
<td>155 205 155 </td>
<td>#9BCD9B</td></tr>
<tr>
<td bgcolor="#698b69">&nbsp;</td>
<td>DarkSeaGreen4</td>
<td>105 139 105 </td>
<td>#698B69</td></tr>
<tr>
<td bgcolor="#54ff9f">&nbsp;</td>
<td>SeaGreen1</td>
<td>84 255 159 </td>
<td>#54FF9F</td></tr>
<tr>
<td bgcolor="#4eee94">&nbsp;</td>
<td>SeaGreen2</td>
<td>78 238 148 </td>
<td>#4EEE94</td></tr>
<tr>
<td bgcolor="#43cd80">&nbsp;</td>
<td>SeaGreen3</td>
<td>67 205 128 </td>
<td>#43CD80</td></tr>
<tr>
<td bgcolor="#2e8b57">&nbsp;</td>
<td>SeaGreen4</td>
<td>46 139 87 </td>
<td>#2E8B57</td></tr>
<tr>
<td bgcolor="#9aff9a">&nbsp;</td>
<td>PaleGreen1</td>
<td>154 255 154 </td>
<td>#9AFF9A</td></tr>
<tr>
<td bgcolor="#90ee90">&nbsp;</td>
<td>PaleGreen2</td>
<td>144 238 144 </td>
<td>#90EE90</td></tr>
<tr>
<td bgcolor="#7ccd7c">&nbsp;</td>
<td>PaleGreen3</td>
<td>124 205 124 </td>
<td>#7CCD7C</td></tr>
<tr>
<td bgcolor="#548b54">&nbsp;</td>
<td>PaleGreen4</td>
<td>84 139 84 </td>
<td>#548B54</td></tr>
<tr>
<td bgcolor="#00ff7f">&nbsp;</td>
<td>SpringGreen1</td>
<td>0 255 127 </td>
<td>#00FF7F</td></tr>
<tr>
<td bgcolor="#00ee76">&nbsp;</td>
<td>SpringGreen2</td>
<td>0 238 118 </td>
<td>#00EE76</td></tr>
<tr>
<td bgcolor="#00cd66">&nbsp;</td>
<td>SpringGreen3</td>
<td>0 205 102 </td>
<td>#00CD66</td></tr>
<tr>
<td bgcolor="#008b45">&nbsp;</td>
<td>SpringGreen4</td>
<td>0 139 69 </td>
<td>#008B45</td></tr>
<tr>
<td bgcolor="#00ff00">&nbsp;</td>
<td>Green1</td>
<td>0 255 0 </td>
<td>#00FF00</td></tr>
<tr>
<td bgcolor="#00ee00">&nbsp;</td>
<td>Green2</td>
<td>0 238 0 </td>
<td>#00EE00</td></tr>
<tr>
<td bgcolor="#00cd00">&nbsp;</td>
<td>Green3</td>
<td>0 205 0 </td>
<td>#00CD00</td></tr>
<tr>
<td bgcolor="#008b00">&nbsp;</td>
<td>Green4</td>
<td>0 139 0 </td>
<td>#008B00</td></tr>
<tr>
<td bgcolor="#7fff00">&nbsp;</td>
<td>Chartreuse1</td>
<td>127 255 0 </td>
<td>#7FFF00</td></tr>
<tr>
<td bgcolor="#76ee00">&nbsp;</td>
<td>Chartreuse2</td>
<td>118 238 0 </td>
<td>#76EE00</td></tr>
<tr>
<td bgcolor="#66cd00">&nbsp;</td>
<td>Chartreuse3</td>
<td>102 205 0 </td>
<td>#66CD00</td></tr>
<tr>
<td bgcolor="#458b00">&nbsp;</td>
<td>Chartreuse4</td>
<td>69 139 0 </td>
<td>#458B00</td></tr>
<tr>
<td bgcolor="#c0ff3e">&nbsp;</td>
<td>OliveDrab1</td>
<td>192 255 62 </td>
<td>#C0FF3E</td></tr>
<tr>
<td bgcolor="#b3ee3a">&nbsp;</td>
<td>OliveDrab2</td>
<td>179 238 58 </td>
<td>#B3EE3A</td></tr>
<tr>
<td bgcolor="#9acd32">&nbsp;</td>
<td>OliveDrab3</td>
<td>154 205 50 </td>
<td>#9ACD32</td></tr>
<tr>
<td bgcolor="#698b22">&nbsp;</td>
<td>OliveDrab4</td>
<td>105 139 34 </td>
<td>#698B22</td></tr>
<tr>
<td bgcolor="#caff70">&nbsp;</td>
<td>DarkOliveGreen1</td>
<td>202 255 112 </td>
<td>#CAFF70</td></tr>
<tr>
<td bgcolor="#bcee68">&nbsp;</td>
<td>DarkOliveGreen2</td>
<td>188 238 104 </td>
<td>#BCEE68</td></tr>
<tr>
<td bgcolor="#a2cd5a">&nbsp;</td>
<td>DarkOliveGreen3</td>
<td>162 205 90 </td>
<td>#A2CD5A</td></tr>
<tr>
<td bgcolor="#6e8b3d">&nbsp;</td>
<td>DarkOliveGreen4</td>
<td>110 139 61 </td>
<td>#6E8B3D</td></tr>
<tr>
<td bgcolor="#fff68f">&nbsp;</td>
<td>Khaki1</td>
<td>255 246 143 </td>
<td>#FFF68F</td></tr>
<tr>
<td bgcolor="#eee685">&nbsp;</td>
<td>Khaki2</td>
<td>238 230 133 </td>
<td>#EEE685</td></tr>
<tr>
<td bgcolor="#cdc673">&nbsp;</td>
<td>Khaki3</td>
<td>205 198 115 </td>
<td>#CDC673</td></tr>
<tr>
<td bgcolor="#8b864e">&nbsp;</td>
<td>Khaki4</td>
<td>139 134 78 </td>
<td>#8B864E</td></tr>
<tr>
<td bgcolor="#ffec8b">&nbsp;</td>
<td>LightGoldenrod1</td>
<td>255 236 139 </td>
<td>#FFEC8B</td></tr>
<tr>
<td bgcolor="#eedc82">&nbsp;</td>
<td>LightGoldenrod2</td>
<td>238 220 130 </td>
<td>#EEDC82</td></tr>
<tr>
<td bgcolor="#cdbe70">&nbsp;</td>
<td>LightGoldenrod3</td>
<td>205 190 112 </td>
<td>#CDBE70</td></tr>
<tr>
<td bgcolor="#8b814c">&nbsp;</td>
<td>LightGoldenrod4</td>
<td>139 129 76 </td>
<td>#8B814C</td></tr>
<tr>
<td bgcolor="#ffffe0">&nbsp;</td>
<td>LightYellow1</td>
<td>255 255 224 </td>
<td>#FFFFE0</td></tr>
<tr>
<td bgcolor="#eeeed1">&nbsp;</td>
<td>LightYellow2</td>
<td>238 238 209 </td>
<td>#EEEED1</td></tr>
<tr>
<td bgcolor="#cdcdb4">&nbsp;</td>
<td>LightYellow3</td>
<td>205 205 180 </td>
<td>#CDCDB4</td></tr>
<tr>
<td bgcolor="#8b8b7a">&nbsp;</td>
<td>LightYellow4</td>
<td>139 139 122 </td>
<td>#8B8B7A</td></tr>
<tr>
<td bgcolor="#ffff00">&nbsp;</td>
<td>Yellow1</td>
<td>255 255 0 </td>
<td>#FFFF00</td></tr>
<tr>
<td bgcolor="#eeee00">&nbsp;</td>
<td>Yellow2</td>
<td>238 238 0 </td>
<td>#EEEE00</td></tr>
<tr>
<td bgcolor="#cdcd00">&nbsp;</td>
<td>Yellow3</td>
<td>205 205 0 </td>
<td>#CDCD00</td></tr>
<tr>
<td bgcolor="#8b8b00">&nbsp;</td>
<td>Yellow4</td>
<td>139 139 0 </td>
<td>#8B8B00</td></tr>
<tr>
<td bgcolor="#ffd700">&nbsp;</td>
<td>Gold1</td>
<td>255 215 0 </td>
<td>#FFD700</td></tr>
<tr>
<td bgcolor="#eec900">&nbsp;</td>
<td>Gold2</td>
<td>238 201 0 </td>
<td>#EEC900</td></tr>
<tr>
<td bgcolor="#cdad00">&nbsp;</td>
<td>Gold3</td>
<td>205 173 0 </td>
<td>#CDAD00</td></tr>
<tr>
<td bgcolor="#8b7500">&nbsp;</td>
<td>Gold4</td>
<td>139 117 0 </td>
<td>#8B7500</td></tr>
<tr>
<td bgcolor="#ffc125">&nbsp;</td>
<td>Goldenrod1</td>
<td>255 193 37 </td>
<td>#FFC125</td></tr>
<tr>
<td bgcolor="#eeb422">&nbsp;</td>
<td>Goldenrod2</td>
<td>238 180 34 </td>
<td>#EEB422</td></tr>
<tr>
<td bgcolor="#cd9b1d">&nbsp;</td>
<td>Goldenrod3</td>
<td>205 155 29 </td>
<td>#CD9B1D</td></tr>
<tr>
<td bgcolor="#8b6914">&nbsp;</td>
<td>Goldenrod4</td>
<td>139 105 20 </td>
<td>#8B6914</td></tr>
<tr>
<td bgcolor="#ffb90f">&nbsp;</td>
<td>DarkGoldenrod1</td>
<td>255 185 15 </td>
<td>#FFB90F</td></tr>
<tr>
<td bgcolor="#eead0e">&nbsp;</td>
<td>DarkGoldenrod2</td>
<td>238 173 14 </td>
<td>#EEAD0E</td></tr>
<tr>
<td bgcolor="#cd950c">&nbsp;</td>
<td>DarkGoldenrod3</td>
<td>205 149 12 </td>
<td>#CD950C</td></tr>
<tr>
<td bgcolor="#8b658b">&nbsp;</td>
<td>DarkGoldenrod4</td>
<td>139 101 8 </td>
<td>#8B658B</td></tr>
<tr>
<td bgcolor="#ffc1c1">&nbsp;</td>
<td>RosyBrown1</td>
<td>255 193 193 </td>
<td>#FFC1C1</td></tr>
<tr>
<td bgcolor="#eeb4b4">&nbsp;</td>
<td>RosyBrown2</td>
<td>238 180 180 </td>
<td>#EEB4B4</td></tr>
<tr>
<td bgcolor="#cd9b9b">&nbsp;</td>
<td>RosyBrown3</td>
<td>205 155 155 </td>
<td>#CD9B9B</td></tr>
<tr>
<td bgcolor="#8b6969">&nbsp;</td>
<td>RosyBrown4</td>
<td>139 105 105 </td>
<td>#8B6969</td></tr>
<tr>
<td bgcolor="#ff6a6a">&nbsp;</td>
<td>IndianRed1</td>
<td>255 106 106 </td>
<td>#FF6A6A</td></tr>
<tr>
<td bgcolor="#ee6363">&nbsp;</td>
<td>IndianRed2</td>
<td>238 99 99 </td>
<td>#EE6363</td></tr>
<tr>
<td bgcolor="#cd5555">&nbsp;</td>
<td>IndianRed3</td>
<td>205 85 85 </td>
<td>#CD5555</td></tr>
<tr>
<td bgcolor="#8b3a3a">&nbsp;</td>
<td>IndianRed4</td>
<td>139 58 58 </td>
<td>#8B3A3A</td></tr>
<tr>
<td bgcolor="#ff8247">&nbsp;</td>
<td>Sienna1</td>
<td>255 130 71 </td>
<td>#FF8247</td></tr>
<tr>
<td bgcolor="#ee7942">&nbsp;</td>
<td>Sienna2</td>
<td>238 121 66 </td>
<td>#EE7942</td></tr>
<tr>
<td bgcolor="#cd6839">&nbsp;</td>
<td>Sienna3</td>
<td>205 104 57 </td>
<td>#CD6839</td></tr>
<tr>
<td bgcolor="#8b4726">&nbsp;</td>
<td>Sienna4</td>
<td>139 71 38 </td>
<td>#8B4726</td></tr>
<tr>
<td bgcolor="#ffd39b">&nbsp;</td>
<td>Burlywood1</td>
<td>255 211 155 </td>
<td>#FFD39B</td></tr>
<tr>
<td bgcolor="#eec591">&nbsp;</td>
<td>Burlywood2</td>
<td>238 197 145 </td>
<td>#EEC591</td></tr>
<tr>
<td bgcolor="#cdaa7d">&nbsp;</td>
<td>Burlywood3</td>
<td>205 170 125 </td>
<td>#CDAA7D</td></tr>
<tr>
<td bgcolor="#8b7355">&nbsp;</td>
<td>Burlywood4</td>
<td>139 115 85 </td>
<td>#8B7355</td></tr>
<tr>
<td bgcolor="#ffe7ba">&nbsp;</td>
<td>Wheat1</td>
<td>255 231 186 </td>
<td>#FFE7BA</td></tr>
<tr>
<td bgcolor="#eed8ae">&nbsp;</td>
<td>Wheat2</td>
<td>238 216 174 </td>
<td>#EED8AE</td></tr>
<tr>
<td bgcolor="#cdba96">&nbsp;</td>
<td>Wheat3</td>
<td>205 186 150 </td>
<td>#CDBA96</td></tr>
<tr>
<td bgcolor="#8b7e66">&nbsp;</td>
<td>Wheat4</td>
<td>139 126 102 </td>
<td>#8B7E66</td></tr>
<tr>
<td bgcolor="#ffa54f">&nbsp;</td>
<td>Tan1 </td>
<td>255 165 79 </td>
<td>#FFA54F</td></tr>
<tr>
<td bgcolor="#ee9a49">&nbsp;</td>
<td>Tan2 </td>
<td>238 154 73 </td>
<td>#EE9A49</td></tr>
<tr>
<td bgcolor="#cd853f">&nbsp;</td>
<td>Tan3 </td>
<td>205 133 63 </td>
<td>#CD853F</td></tr>
<tr>
<td bgcolor="#8b5a2b">&nbsp;</td>
<td>Tan4 </td>
<td>139 90 43 </td>
<td>#8B5A2B</td></tr>
<tr>
<td bgcolor="#ff7f24">&nbsp;</td>
<td>Chocolate1</td>
<td>255 127 36 </td>
<td>#FF7F24</td></tr>
<tr>
<td bgcolor="#ee7621">&nbsp;</td>
<td>Chocolate2</td>
<td>238 118 33 </td>
<td>#EE7621</td></tr>
<tr>
<td bgcolor="#cd661d">&nbsp;</td>
<td>Chocolate3</td>
<td>205 102 29 </td>
<td>#CD661D</td></tr>
<tr>
<td bgcolor="#8b4513">&nbsp;</td>
<td>Chocolate4</td>
<td>139 69 19 </td>
<td>#8B4513</td></tr>
<tr>
<td bgcolor="#ff3030">&nbsp;</td>
<td>Firebrick1</td>
<td>255 48 48 </td>
<td>#FF3030</td></tr>
<tr>
<td bgcolor="#ee2c2c">&nbsp;</td>
<td>Firebrick2</td>
<td>238 44 44 </td>
<td>#EE2C2C</td></tr>
<tr>
<td bgcolor="#cd2626">&nbsp;</td>
<td>Firebrick3</td>
<td>205 38 38 </td>
<td>#CD2626</td></tr>
<tr>
<td bgcolor="#8b1a1a">&nbsp;</td>
<td>Firebrick4</td>
<td>139 26 26 </td>
<td>#8B1A1A</td></tr>
<tr>
<td bgcolor="#ff4040">&nbsp;</td>
<td>Brown1</td>
<td>255 64 64 </td>
<td>#FF4040</td></tr>
<tr>
<td bgcolor="#ee3b3b">&nbsp;</td>
<td>Brown2</td>
<td>238 59 59 </td>
<td>#EE3B3B</td></tr>
<tr>
<td bgcolor="#cd3333">&nbsp;</td>
<td>Brown3</td>
<td>205 51 51 </td>
<td>#CD3333</td></tr>
<tr>
<td bgcolor="#8b2323">&nbsp;</td>
<td>Brown4</td>
<td>139 35 35 </td>
<td>#8B2323</td></tr>
<tr>
<td bgcolor="#ff8c69">&nbsp;</td>
<td>Salmon1</td>
<td>255 140 105 </td>
<td>#FF8C69</td></tr>
<tr>
<td bgcolor="#ee8262">&nbsp;</td>
<td>Salmon2</td>
<td>238 130 98 </td>
<td>#EE8262</td></tr>
<tr>
<td bgcolor="#cd7054">&nbsp;</td>
<td>Salmon3</td>
<td>205 112 84 </td>
<td>#CD7054</td></tr>
<tr>
<td bgcolor="#8b4c39">&nbsp;</td>
<td>Salmon4</td>
<td>139 76 57 </td>
<td>#8B4C39</td></tr>
<tr>
<td bgcolor="#ffa07a">&nbsp;</td>
<td>LightSalmon1</td>
<td>255 160 122 </td>
<td>#FFA07A</td></tr>
<tr>
<td bgcolor="#ee9572">&nbsp;</td>
<td>LightSalmon2</td>
<td>238 149 114 </td>
<td>#EE9572</td></tr>
<tr>
<td bgcolor="#cd8162">&nbsp;</td>
<td>LightSalmon3</td>
<td>205 129 98 </td>
<td>#CD8162</td></tr>
<tr>
<td bgcolor="#8b5742">&nbsp;</td>
<td>LightSalmon4</td>
<td>139 87 66 </td>
<td>#8B5742</td></tr>
<tr>
<td bgcolor="#ffa500">&nbsp;</td>
<td>Orange1</td>
<td>255 165 0 </td>
<td>#FFA500</td></tr>
<tr>
<td bgcolor="#ee9a00">&nbsp;</td>
<td>Orange2</td>
<td>238 154 0 </td>
<td>#EE9A00</td></tr>
<tr>
<td bgcolor="#cd8500">&nbsp;</td>
<td>Orange3</td>
<td>205 133 0 </td>
<td>#CD8500</td></tr>
<tr>
<td bgcolor="#8b5a00">&nbsp;</td>
<td>Orange4</td>
<td>139 90 0 </td>
<td>#8B5A00</td></tr>
<tr>
<td bgcolor="#ff7f00">&nbsp;</td>
<td>DarkOrange1</td>
<td>255 127 0 </td>
<td>#FF7F00</td></tr>
<tr>
<td bgcolor="#ee7600">&nbsp;</td>
<td>DarkOrange2</td>
<td>238 118 0 </td>
<td>#EE7600</td></tr>
<tr>
<td bgcolor="#cd6600">&nbsp;</td>
<td>DarkOrange3</td>
<td>205 102 0 </td>
<td>#CD6600</td></tr>
<tr>
<td bgcolor="#8b4500">&nbsp;</td>
<td>DarkOrange4</td>
<td>139 69 0 </td>
<td>#8B4500</td></tr>
<tr>
<td bgcolor="#ff7256">&nbsp;</td>
<td>Coral1</td>
<td>255 114 86 </td>
<td>#FF7256</td></tr>
<tr>
<td bgcolor="#ee6a50">&nbsp;</td>
<td>Coral2</td>
<td>238 106 80 </td>
<td>#EE6A50</td></tr>
<tr>
<td bgcolor="#cd5b45">&nbsp;</td>
<td>Coral3</td>
<td>205 91 69 </td>
<td>#CD5B45</td></tr>
<tr>
<td bgcolor="#8b3e2f">&nbsp;</td>
<td>Coral4</td>
<td>139 62 47 </td>
<td>#8B3E2F</td></tr>
<tr>
<td bgcolor="#ff6347">&nbsp;</td>
<td>Tomato1</td>
<td>255 99 71 </td>
<td>#FF6347</td></tr>
<tr>
<td bgcolor="#ee5c42">&nbsp;</td>
<td>Tomato2</td>
<td>238 92 66 </td>
<td>#EE5C42</td></tr>
<tr>
<td bgcolor="#cd4f39">&nbsp;</td>
<td>Tomato3</td>
<td>205 79 57 </td>
<td>#CD4F39</td></tr>
<tr>
<td bgcolor="#8b3626">&nbsp;</td>
<td>Tomato4</td>
<td>139 54 38 </td>
<td>#8B3626</td></tr>
<tr>
<td bgcolor="#ff4500">&nbsp;</td>
<td>OrangeRed1</td>
<td>255 69 0 </td>
<td>#FF4500</td></tr>
<tr>
<td bgcolor="#ee4000">&nbsp;</td>
<td>OrangeRed2</td>
<td>238 64 0 </td>
<td>#EE4000</td></tr>
<tr>
<td bgcolor="#cd3700">&nbsp;</td>
<td>OrangeRed3</td>
<td>205 55 0 </td>
<td>#CD3700</td></tr>
<tr>
<td bgcolor="#8b2500">&nbsp;</td>
<td>OrangeRed4</td>
<td>139 37 0 </td>
<td>#8B2500</td></tr>
<tr>
<td bgcolor="#ff0000">&nbsp;</td>
<td>Red1 </td>
<td>255 0 0 </td>
<td>#FF0000</td></tr>
<tr>
<td bgcolor="#ee0000">&nbsp;</td>
<td>Red2 </td>
<td>238 0 0 </td>
<td>#EE0000</td></tr>
<tr>
<td bgcolor="#cd0000">&nbsp;</td>
<td>Red3 </td>
<td>205 0 0 </td>
<td>#CD0000</td></tr>
<tr>
<td bgcolor="#8b0000">&nbsp;</td>
<td>Red4 </td>
<td>139 0 0 </td>
<td>#8B0000</td></tr>
<tr>
<td bgcolor="#ff1493">&nbsp;</td>
<td>DeepPink1</td>
<td>255 20 147 </td>
<td>#FF1493</td></tr>
<tr>
<td bgcolor="#ee1289">&nbsp;</td>
<td>DeepPink2</td>
<td>238 18 137 </td>
<td>#EE1289</td></tr>
<tr>
<td bgcolor="#cd1076">&nbsp;</td>
<td>DeepPink3</td>
<td>205 16 118 </td>
<td>#CD1076</td></tr>
<tr>
<td bgcolor="#8b0a50">&nbsp;</td>
<td>DeepPink4</td>
<td>139 10 80 </td>
<td>#8B0A50</td></tr>
<tr>
<td bgcolor="#ff6eb4">&nbsp;</td>
<td>HotPink1</td>
<td>255 110 180 </td>
<td>#FF6EB4</td></tr>
<tr>
<td bgcolor="#ee6aa7">&nbsp;</td>
<td>HotPink2</td>
<td>238 106 167 </td>
<td>#EE6AA7</td></tr>
<tr>
<td bgcolor="#cd6090">&nbsp;</td>
<td>HotPink3</td>
<td>205 96 144 </td>
<td>#CD6090</td></tr>
<tr>
<td bgcolor="#8b3a62">&nbsp;</td>
<td>HotPink4</td>
<td>139 58 98 </td>
<td>#8B3A62</td></tr>
<tr>
<td bgcolor="#ffb5c5">&nbsp;</td>
<td>Pink1</td>
<td>255 181 197 </td>
<td>#FFB5C5</td></tr>
<tr>
<td bgcolor="#eea9b8">&nbsp;</td>
<td>Pink2</td>
<td>238 169 184 </td>
<td>#EEA9B8</td></tr>
<tr>
<td bgcolor="#cd919e">&nbsp;</td>
<td>Pink3</td>
<td>205 145 158 </td>
<td>#CD919E</td></tr>
<tr>
<td bgcolor="#8b636c">&nbsp;</td>
<td>Pink4</td>
<td>139 99 108 </td>
<td>#8B636C</td></tr>
<tr>
<td bgcolor="#ffaeb9">&nbsp;</td>
<td>LightPink1</td>
<td>255 174 185 </td>
<td>#FFAEB9</td></tr>
<tr>
<td bgcolor="#eea2ad">&nbsp;</td>
<td>LightPink2</td>
<td>238 162 173 </td>
<td>#EEA2AD</td></tr>
<tr>
<td bgcolor="#cd8c95">&nbsp;</td>
<td>LightPink3</td>
<td>205 140 149 </td>
<td>#CD8C95</td></tr>
<tr>
<td bgcolor="#8b5f65">&nbsp;</td>
<td>LightPink4</td>
<td>139 95 101 </td>
<td>#8B5F65</td></tr>
<tr>
<td bgcolor="#ff82ab">&nbsp;</td>
<td>PaleVioletRed1</td>
<td>255 130 171 </td>
<td>#FF82AB</td></tr>
<tr>
<td bgcolor="#ee799f">&nbsp;</td>
<td>PaleVioletRed2</td>
<td>238 121 159 </td>
<td>#EE799F</td></tr>
<tr>
<td bgcolor="#cd6889">&nbsp;</td>
<td>PaleVioletRed3</td>
<td>205 104 137 </td>
<td>#CD6889</td></tr>
<tr>
<td bgcolor="#8b475d">&nbsp;</td>
<td>PaleVioletRed4</td>
<td>139 71 93 </td>
<td>#8B475D</td></tr>
<tr>
<td bgcolor="#ff34b3">&nbsp;</td>
<td>Maroon1</td>
<td>255 52 179 </td>
<td>#FF34B3</td></tr>
<tr>
<td bgcolor="#ee30a7">&nbsp;</td>
<td>Maroon2</td>
<td>238 48 167 </td>
<td>#EE30A7</td></tr>
<tr>
<td bgcolor="#cd2990">&nbsp;</td>
<td>Maroon3</td>
<td>205 41 144 </td>
<td>#CD2990</td></tr>
<tr>
<td bgcolor="#8b1c62">&nbsp;</td>
<td>Maroon4</td>
<td>139 28 98 </td>
<td>#8B1C62</td></tr>
<tr>
<td bgcolor="#ff3e96">&nbsp;</td>
<td>VioletRed1</td>
<td>255 62 150 </td>
<td>#FF3E96</td></tr>
<tr>
<td bgcolor="#ee3a8c">&nbsp;</td>
<td>VioletRed2</td>
<td>238 58 140 </td>
<td>#EE3A8C</td></tr>
<tr>
<td bgcolor="#cd3278">&nbsp;</td>
<td>VioletRed3</td>
<td>205 50 120 </td>
<td>#CD3278</td></tr>
<tr>
<td bgcolor="#8b2252">&nbsp;</td>
<td>VioletRed4</td>
<td>139 34 82 </td>
<td>#8B2252</td></tr>
<tr>
<td bgcolor="#ff00ff">&nbsp;</td>
<td>Magenta1</td>
<td>255 0 255 </td>
<td>#FF00FF</td></tr>
<tr>
<td bgcolor="#ee00ee">&nbsp;</td>
<td>Magenta2</td>
<td>238 0 238 </td>
<td>#EE00EE</td></tr>
<tr>
<td bgcolor="#cd00cd">&nbsp;</td>
<td>Magenta3</td>
<td>205 0 205 </td>
<td>#CD00CD</td></tr>
<tr>
<td bgcolor="#8b008b">&nbsp;</td>
<td>Magenta4</td>
<td>139 0 139 </td>
<td>#8B008B</td></tr>
<tr>
<td bgcolor="#ff83fa">&nbsp;</td>
<td>Orchid1</td>
<td>255 131 250 </td>
<td>#FF83FA</td></tr>
<tr>
<td bgcolor="#ee7ae9">&nbsp;</td>
<td>Orchid2</td>
<td>238 122 233 </td>
<td>#EE7AE9</td></tr>
<tr>
<td bgcolor="#cd69c9">&nbsp;</td>
<td>Orchid3</td>
<td>205 105 201 </td>
<td>#CD69C9</td></tr>
<tr>
<td bgcolor="#8b4789">&nbsp;</td>
<td>Orchid4</td>
<td>139 71 137 </td>
<td>#8B4789</td></tr>
<tr>
<td bgcolor="#ffbbff">&nbsp;</td>
<td>Plum1</td>
<td>255 187 255 </td>
<td>#FFBBFF</td></tr>
<tr>
<td bgcolor="#eeaeee">&nbsp;</td>
<td>Plum2</td>
<td>238 174 238 </td>
<td>#EEAEEE</td></tr>
<tr>
<td bgcolor="#cd96cd">&nbsp;</td>
<td>Plum3</td>
<td>205 150 205 </td>
<td>#CD96CD</td></tr>
<tr>
<td bgcolor="#8b668b">&nbsp;</td>
<td>Plum4</td>
<td>139 102 139 </td>
<td>#8B668B</td></tr>
<tr>
<td bgcolor="#e066ff">&nbsp;</td>
<td>MediumOrchid1</td>
<td>224 102 255 </td>
<td>#E066FF</td></tr>
<tr>
<td bgcolor="#d15fee">&nbsp;</td>
<td>MediumOrchid2</td>
<td>209 95 238 </td>
<td>#D15FEE</td></tr>
<tr>
<td bgcolor="#b452cd">&nbsp;</td>
<td>MediumOrchid3</td>
<td>180 82 205 </td>
<td>#B452CD</td></tr>
<tr>
<td bgcolor="#7a378b">&nbsp;</td>
<td>MediumOrchid4</td>
<td>122 55 139 </td>
<td>#7A378B</td></tr>
<tr>
<td bgcolor="#bf3eff">&nbsp;</td>
<td>DarkOrchid1</td>
<td>191 62 255 </td>
<td>#BF3EFF</td></tr>
<tr>
<td bgcolor="#b23aee">&nbsp;</td>
<td>DarkOrchid2</td>
<td>178 58 238 </td>
<td>#B23AEE</td></tr>
<tr>
<td bgcolor="#9a32cd">&nbsp;</td>
<td>DarkOrchid3</td>
<td>154 50 205 </td>
<td>#9A32CD</td></tr>
<tr>
<td bgcolor="#68228b">&nbsp;</td>
<td>DarkOrchid4</td>
<td>104 34 139 </td>
<td>#68228B</td></tr>
<tr>
<td bgcolor="#9b30ff">&nbsp;</td>
<td>Purple1</td>
<td>155 48 255 </td>
<td>#9B30FF</td></tr>
<tr>
<td bgcolor="#912cee">&nbsp;</td>
<td>Purple2</td>
<td>145 44 238 </td>
<td>#912CEE</td></tr>
<tr>
<td bgcolor="#7d26cd">&nbsp;</td>
<td>Purple3</td>
<td>125 38 205 </td>
<td>#7D26CD</td></tr>
<tr>
<td bgcolor="#551a8b">&nbsp;</td>
<td>Purple4</td>
<td>85 26 139 </td>
<td>#551A8B</td></tr>
<tr>
<td bgcolor="#ab82ff">&nbsp;</td>
<td>MediumPurple1</td>
<td>171 130 255 </td>
<td>#AB82FF</td></tr>
<tr>
<td bgcolor="#9f79ee">&nbsp;</td>
<td>MediumPurple2</td>
<td>159 121 238 </td>
<td>#9F79EE</td></tr>
<tr>
<td bgcolor="#8968cd">&nbsp;</td>
<td>MediumPurple3</td>
<td>137 104 205 </td>
<td>#8968CD</td></tr>
<tr>
<td bgcolor="#5d478b">&nbsp;</td>
<td>MediumPurple4</td>
<td>93 71 139 </td>
<td>#5D478B</td></tr>
<tr>
<td bgcolor="#ffe1ff">&nbsp;</td>
<td>Thistle1</td>
<td>255 225 255 </td>
<td>#FFE1FF</td></tr>
<tr>
<td bgcolor="#eed2ee">&nbsp;</td>
<td>Thistle2</td>
<td>238 210 238 </td>
<td>#EED2EE</td></tr>
<tr>
<td bgcolor="#cdb5cd">&nbsp;</td>
<td>Thistle3</td>
<td>205 181 205 </td>
<td>#CDB5CD</td></tr>
<tr>
<td bgcolor="#8b7b8b">&nbsp;</td>
<td>Thistle4</td>
<td>139 123 139 </td>
<td>#8B7B8B</td></tr>
<tr>
<td bgcolor="#1c1c1c">&nbsp;</td>
<td>grey11</td>
<td>28 28 28 </td>
<td>#1C1C1C</td></tr>
<tr>
<td bgcolor="#363636">&nbsp;</td>
<td>grey21</td>
<td>54 54 54 </td>
<td>#363636</td></tr>
<tr>
<td bgcolor="#4f4f4f">&nbsp;</td>
<td>grey31</td>
<td>79 79 79 </td>
<td>#4F4F4F</td></tr>
<tr>
<td bgcolor="#696969">&nbsp;</td>
<td>grey41</td>
<td>105 105 105 </td>
<td>#696969</td></tr>
<tr>
<td bgcolor="#828282">&nbsp;</td>
<td>grey51</td>
<td>130 130 130 </td>
<td>#828282</td></tr>
<tr>
<td bgcolor="#9c9c9c">&nbsp;</td>
<td>grey61</td>
<td>156 156 156 </td>
<td>#9C9C9C</td></tr>
<tr>
<td bgcolor="#b5b5b5">&nbsp;</td>
<td>grey71</td>
<td>181 181 181 </td>
<td>#B5B5B5</td></tr>
<tr>
<td bgcolor="#cfcfcf">&nbsp;</td>
<td>gray81</td>
<td>207 207 207 </td>
<td>#CFCFCF</td></tr>
<tr>
<td bgcolor="#e8e8e8">&nbsp;</td>
<td>gray91</td>
<td>232 232 232 </td>
<td>#E8E8E8</td></tr>
<tr>
<td bgcolor="#a9a9a9">&nbsp;</td>
<td>DarkGrey</td>
<td>169 169 169 </td>
<td>#A9A9A9</td></tr>
<tr>
<td bgcolor="#00008b">&nbsp;</td>
<td>DarkBlue</td>
<td>0 0 139 </td>
<td>#00008B</td></tr>
<tr>
<td bgcolor="#008b8b">&nbsp;</td>
<td>DarkCyan</td>
<td>0 139 139 </td>
<td>#008B8B</td></tr>
<tr>
<td bgcolor="#8b008b">&nbsp;</td>
<td>DarkMagenta</td>
<td>139 0 139 </td>
<td>#8B008B</td></tr>
<tr>
<td bgcolor="#8b0000">&nbsp;</td>
<td>DarkRed</td>
<td>139 0 0 </td>
<td>#8B0000</td></tr>
<tr>
<td bgcolor="#90ee90">&nbsp;</td>
<td>LightGreen</td>
<td>144 238 144 </td>
<td>#90EE90</td></tr></tbody></table>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
{/block}
+256
View File
@@ -0,0 +1,256 @@
<?php
/**
* RSA生成与加密
*/
namespace plugin\dev\rsa;
use app\Plugin;
class App extends Plugin
{
/**
* 密钥配置
* @var array
*/
public $config = [
//指定应该使用多少位来生成私钥 512 1024 2048 4096等
"private_key_bits" => 1024,
//选择在创建CSR时应该使用哪些扩展。可选值有 OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSA 或 OPENSSL_KEYTYPE_EC. 默认值是 OPENSSL_KEYTYPE_RSA.
"private_key_type" => OPENSSL_KEYTYPE_RSA,
];
private $passPhrase;
private $rsaPrivateKey;
private $rsaPublicKey;
private $data;
private $sign;
private $origin;
private $coded;
private $opensslPadding;
public function __construct()
{
$this->passPhrase = request()->param("pass_phrase");
if($this->passPhrase == '') $this->passPhrase = null;
$this->rsaPrivateKey = request()->param("private_key");
$this->rsaPublicKey = request()->param("public_key");
$this->config["private_key_bits"] = request()->param("private_key_bits");
$this->data = request()->param("data");
$this->origin = request()->param("origin");
$this->coded = request()->param("coded");
$this->sign = request()->param("sign");
$this->opensslPadding = request()->param("openssl_padding");
}
public function index()
{
return $this->view();
}
/**
* 生成密钥对
*/
public function generate()
{
// 生成公钥私钥资源
$res = openssl_pkey_new($this->config);
$privateKey = '';
// 导出私钥
openssl_pkey_export($res, $privateKey, $this->passPhrase, $this->config);
// 导出公钥
$pubKey = openssl_pkey_get_details($res);
openssl_pkey_free($res);
return msg('ok', 'success', [
"public_key" => $pubKey["key"],
"private_key" => $privateKey,
]);
}
/**
* 私钥加密
* @param string $data
* @return null|string
*/
public function private_encrypt()
{
if (!is_string($this->origin)) {
return msg('error', '加密失败');
}
try {
if (openssl_private_encrypt($this->origin, $encrypted, $this->getRsaPrivateKey(), $this->opensslPadding)) {
return msg('ok', 'success', base64_encode($encrypted));
}
return msg('error', '加密失败');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
/**
* 公钥加密
* @param string $data
* @return null|string
*/
public function public_encrypt()
{
if (!is_string($this->origin)) {
return msg('error', '加密失败');
}
$dataLength = mb_strlen($this->origin);
$offet = 0;
$length = 128;
$i = 0;
$string = '';
try {
while ($dataLength - $offet > 0) {
if ($dataLength - $offet > $length) {
$str = mb_substr($this->origin, $offet, $length);
} else {
$str = mb_substr($this->origin, $offet, $dataLength - $offet);
}
$encrypted = '';
openssl_public_encrypt($str, $encrypted, $this->rsaPublicKey, $this->opensslPadding);
$string .= $encrypted;
$i++;
$offet = $i * $length;
}
if ($string) {
return msg('ok', 'success', base64_encode($string));
}
return msg('error', '加密失败');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
/**
* 私钥解密
* @param string $encrypted
* @return null
*/
public function private_decrypt()
{
if (!is_string($this->coded)) {
return msg('error', '解密失败');
}
try {
if (openssl_private_decrypt(base64_decode($this->coded), $decrypted, $this->getRsaPrivateKey(), $this->opensslPadding)) {
return msg('ok', 'success', $decrypted);
}
return msg('error', '解密失败');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
/**
* 公钥解密
* @param string $encrypted
* @return null
*/
public function public_decrypt()
{
if (!is_string($this->coded)) {
return msg('error', '解密失败');
}
try {
if (openssl_public_decrypt(base64_decode($this->coded), $decrypted, $this->rsaPublicKey, $this->opensslPadding)) {
return msg('ok', 'success', $decrypted);
}
return msg('error', '解密失败');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
/**
* 生成签名
*
* @param string 签名材料
* @param string 签名编码(base64/hex/bin
* @return string 签名值
*/
public function sign()
{
try {
if (openssl_sign($this->data, $ret, $this->getRsaPrivateKey())) {
$ret = base64_encode($ret);
return msg('ok', 'success', $ret);
}
return msg('error', '签名失败');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
/**
* 验证签名
*
* @param string 签名材料
* @param string 签名值
* @param string 签名编码(base64/hex/bin
* @return \think\response\Json
*/
public function verify()
{
try {
$ret = false;
$sign = base64_decode($this->sign);
if ($sign !== false) {
if (openssl_verify($this->data, $sign, $this->rsaPublicKey) === 1) {
$ret = true;
}
}
if ($ret) {
return msg('ok', '验签成功,签名正确', $ret);
}
return msg('error', '验签失败,签名不正确');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
public function check()
{
try {
openssl_sign('cccyun', $ret, $this->getRsaPrivateKey());
if (openssl_verify('cccyun', $ret, $this->rsaPublicKey) === 1) {
return msg('ok', '验证成功,公私钥匹配');
}
return msg('error', '公私钥不匹配');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
public function output()
{
try {
$openssl_pkey_get_details = openssl_pkey_get_details($this->getRsaPrivateKey());
if ($openssl_pkey_get_details && !empty($openssl_pkey_get_details['key'])) {
return msg('ok', '导出成功', $openssl_pkey_get_details['key']);
}
return msg('error', '导出失败,私钥不正确');
} catch (\Exception $e) {
return msg('error', $e->getMessage());
}
}
/**
* @return array|mixed|null
*/
public function getRsaPrivateKey()
{
$privateKey = openssl_pkey_get_private($this->rsaPrivateKey, $this->passPhrase);
if ($privateKey === false) {
throw new \Exception('私钥不正确或密码错误');
}
return $privateKey;
}
}
+388
View File
@@ -0,0 +1,388 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">RSA公私钥生成、验证、加密和解密</span>
</div>
<ul class="nav nav-tabs">
<li class="nav-item"><a class="nav-link" @click="show=0" :class="{'active':show===0}" href="javascript:">RSA公私钥生成</a></li>
<li class="nav-item"><a class="nav-link" @click="show=1" :class="{'active':show===1}" href="javascript:">RSA加密解密</a></li>
<li class="nav-item"><a class="nav-link" @click="show=2" :class="{'active':show===2}" href="javascript:">RSA签名验签</a></li>
<li class="nav-item"><a class="nav-link" @click="show=3" :class="{'active':show===3}" href="javascript:">RSA公私钥对验证</a></li>
<li class="nav-item"><a class="nav-link" @click="show=4" :class="{'active':show===4}" href="javascript:">RSA公钥导出</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane" id="tabItem1" :class="{'active':show===0}">
<div class="form-group">
<label class="form-label">密钥长度</label>
<select class="form-control" v-model="generate_from.private_key_bits">
<option v-for="v in [512,1024,2048,4096]" :value="v">{{v}} bit</option>
</select>
</div>
<div class="form-group">
<label class="form-label">私钥密码</label>
<div class="form-control-wrap">
<input type="text" v-model="mutipart_from.pass_phrase" placeholder="此项可留空" class="form-control">
</div>
</div>
<button class="btn btn-dim btn-outline-secondary btn-block card-link mb-3" @click="generate">
生成
</button>
<div class="d-flex flex-wrap">
<div class="form-group flex-fill mr-2">
<label class="form-label">RSA公钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.public_key"></textarea>
</div>
</div>
<div class="form-group flex-fill">
<label class="form-label">RSA私钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.private_key"></textarea>
</div>
</div>
</div>
</div>
<div class="tab-pane" id="tabItem1" :class="{'active':show===1}">
<div class="form-group">
<label class="form-label">填充标志</label>
<select class="form-control" v-model="crypto_from.openssl_padding">
<option v-for="v,index in openssl_padding" :value="index+1">{{v}}</option>
</select>
</div>
<div class="form-group">
<label class="form-label">加密/解密方式</label>
<select class="form-control" v-model="crypto_from.type">
<option :value="0">使用公钥加密,使用私钥解密</option>
<option :value="1">使用私钥加密,使用公钥解密</option>
</select>
</div>
<div class="form-group">
<label class="form-label">私钥密码</label>
<div class="form-control-wrap">
<input type="text" v-model="mutipart_from.pass_phrase" placeholder="没有密码请留空" class="form-control">
</div>
</div>
<div class="row pt-1 pb-1 mb-3">
<div class="col-6">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" @click="encrypt">
加密
</button>
</div>
<div class="col-6">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" @click="decrypt">
解密
</button>
</div>
</div>
<div class="d-flex flex-wrap">
<div class="form-group flex-fill mr-2">
<label class="form-label">RSA公钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.public_key"></textarea>
</div>
</div>
<div class="form-group flex-fill">
<label class="form-label">RSA私钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.private_key"></textarea>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">原文,未加密的内容</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="6" v-model="crypto_from.origin"></textarea>
</div>
</div>
<div class="form-group">
<label class="form-label">密文,加密后的内容</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="6" v-model="crypto_from.coded"></textarea>
</div>
</div>
</div>
<div class="tab-pane" id="tabItem1" :class="{'active':show===2}">
<div class="form-group">
<label class="form-label">签名算法</label>
<select class="form-control" v-model="sign_form.openssl_algo">
<option v-for="v,index in openssl_algo" :value="index+1">{{v}}</option>
</select>
</div>
<div class="form-group">
<label class="form-label">私钥密码</label>
<div class="form-control-wrap">
<input type="text" v-model="mutipart_from.pass_phrase" placeholder="没有密码请留空" class="form-control">
</div>
</div>
<div class="row pt-1 pb-1 mb-3">
<div class="col-6">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" @click="sign">
签名
</button>
</div>
<div class="col-6">
<button class="btn btn-dim btn-outline-secondary btn-block card-link" @click="verify">
验签
</button>
</div>
</div>
<div class="d-flex flex-wrap">
<div class="form-group flex-fill mr-2">
<label class="form-label">RSA公钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.public_key"></textarea>
</div>
</div>
<div class="form-group flex-fill">
<label class="form-label">RSA私钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.private_key"></textarea>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">待签名,验签原始内容</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="6" v-model="sign_form.data"></textarea>
</div>
</div>
<div class="form-group">
<label class="form-label">签名,已签名内容</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="3" v-model="sign_form.sign"></textarea>
</div>
</div>
</div>
<div class="tab-pane" id="tabItem1" :class="{'active':show===3}">
<div class="form-group">
<label class="form-label">私钥密码</label>
<div class="form-control-wrap">
<input type="text" v-model="mutipart_from.pass_phrase" placeholder="没有密码请留空" class="form-control">
</div>
</div>
<button class="btn btn-dim btn-outline-secondary btn-block card-link mb-3" @click="check">
验证
</button>
<div class="d-flex flex-wrap">
<div class="form-group flex-fill mr-2">
<label class="form-label">RSA公钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.public_key"></textarea>
</div>
</div>
<div class="form-group flex-fill">
<label class="form-label">RSA私钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.private_key"></textarea>
</div>
</div>
</div>
</div>
<div class="tab-pane" id="tabItem1" :class="{'active':show===4}">
<div class="form-group">
<label class="form-label">私钥密码</label>
<div class="form-control-wrap">
<input type="text" v-model="mutipart_from.pass_phrase" placeholder="没有密码请留空" class="form-control">
</div>
</div>
<button class="btn btn-dim btn-outline-secondary btn-block card-link mb-3" @click="output">
导出
</button>
<div class="d-flex flex-wrap">
<div class="form-group flex-fill mr-2">
<label class="form-label">RSA公钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.public_key"></textarea>
</div>
</div>
<div class="form-group flex-fill">
<label class="form-label">RSA私钥</label>
<div class="form-control-wrap">
<textarea class="form-control" rows="8" v-model="mutipart_from.private_key"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
show: parseInt(localStorage.getItem('{$plugin.alias}_show') || 0),
openssl_padding: [
'OPENSSL_PKCS1_PADDING',
'OPENSSL_SSLV23_PADDING',
'OPENSSL_NO_PADDING',
'OPENSSL_PKCS1_OAEP_PADDING',
],
openssl_algo: [
'OPENSSL_ALGO_SHA1',
'OPENSSL_ALGO_MD5',
'OPENSSL_ALGO_MD4',
'OPENSSL_ALGO_MD2',
'OPENSSL_ALGO_DSS1',
'OPENSSL_ALGO_SHA224',
'OPENSSL_ALGO_SHA256',
'OPENSSL_ALGO_SHA384',
'OPENSSL_ALGO_SHA512',
'OPENSSL_ALGO_RMD160',
],
mutipart_from: JSON.parse(localStorage.getItem('{$plugin.alias}_mutipart_from')) || {
public_key: '',
private_key: '',
pass_phrase: '',
},
generate_from: {
private_key_bits: 1024,
},
crypto_from: {
openssl_padding: 1,
type: 0,
origin: '',
coded: ''
},
sign_form: {
openssl_algo: 1,
data: "",
sign: "",
},
},
watch: {
show(newVal) {
localStorage.setItem('{$plugin.alias}_show', newVal)
},
mutipart_from: {
handler: (newVal) => {
localStorage.setItem('{$plugin.alias}_mutipart_from', JSON.stringify(newVal))
},
deep: true,
}
},
methods: {
generate() {
var that=this;
return httpPost('/api/{$plugin.alias}/generate', {
...this.generate_from,
pass_phrase: this.mutipart_from.pass_phrase
}, function(data){
that.mutipart_from.public_key = data.public_key
that.mutipart_from.private_key = data.private_key
})
},
encrypt() {
var that=this;
if (this.mutipart_from.public_key == '' || this.mutipart_from.private_key == ''){
layer.alert("RSA公钥和私钥不能为空");return
}
if (this.crypto_from.origin === "") {
layer.alert("原文不得为空")
return
}
let api = '/api/{$plugin.alias}/private_encrypt'
if (this.crypto_from.type === 0) {
api = '/api/{$plugin.alias}/public_encrypt'
}
return httpPost(api, {
...this.crypto_from,
...this.mutipart_from
}, function(data){
that.crypto_from.coded = data
})
},
decrypt() {
var that=this;
if (this.mutipart_from.public_key == '' || this.mutipart_from.private_key == ''){
layer.alert("RSA公钥和私钥不能为空");return
}
if (this.crypto_from.coded === "") {
layer.alert("密文不得为空")
return
}
let api = '/api/{$plugin.alias}/private_decrypt'
if (this.crypto_from.type !== 0) {
api = '/api/{$plugin.alias}/public_decrypt'
}
return httpPost(api, {
...this.crypto_from,
...this.mutipart_from
}, function(data){
that.crypto_from.origin = data
})
},
verify() {
if (this.mutipart_from.public_key == '' || this.mutipart_from.private_key == ''){
layer.alert("RSA公钥和私钥不能为空");return
}
if (this.sign_form.sign === "") {
layer.alert("签名不得为空")
return
}
return httpPost('/api/{$plugin.alias}/verify', {
...this.sign_form,
...this.mutipart_from
}, function(res){
if (res.status === "ok") {
layer.alert(res.message, {icon:1})
}else{
layer.alert(res.message, {icon:2})
}
}, true)
},
sign() {
if (this.mutipart_from.public_key == '' || this.mutipart_from.private_key == ''){
layer.alert("RSA公钥和私钥不能为空");return
}
var that=this;
return httpPost('/api/{$plugin.alias}/sign', {
...this.sign_form,
...this.mutipart_from
}, function(data){
that.sign_form.sign = data
})
},
check() {
if (this.mutipart_from.public_key == '' || this.mutipart_from.private_key == ''){
layer.alert("RSA公钥和私钥不能为空");return
}
return httpPost('/api/{$plugin.alias}/check', {
...this.mutipart_from
}, function(res){
if (res.status === "ok") {
layer.alert(res.message, {icon:1})
}else{
layer.alert(res.message, {icon:2})
}
}, true)
},
output() {
if (this.mutipart_from.private_key == ''){
layer.alert("RSA私钥不能为空");return
}
var that=this;
return httpPost('/api/{$plugin.alias}/output', {
...this.mutipart_from
}, function(res){
if (res.status === "ok") {
that.mutipart_from.public_key = res.data
layer.alert(res.message, {icon:1})
}else{
layer.alert(res.message, {icon:2})
}
}, true)
},
},
})
</script>
{/block}
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* UUID生成器
*/
namespace plugin\dev\uuid;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+122
View File
@@ -0,0 +1,122 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 col-xl-8 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">UUID生成器</span>
</div>
<div class="form-group">
<label class="form-label">生成选项:</label>
<div class="row">
<div class="col-6 col-md-3 my-1">
<div class="preview-block">
<div class="custom-control custom-switch mr-3">
<input type="checkbox" class="custom-control-input" v-model="set.upcase" id="customSwitch1">
<label class="custom-control-label" for="customSwitch1">字母大写</label>
</div>
</div>
</div>
<div class="col-6 col-md-3 my-1">
<div class="preview-block">
<div class="custom-control custom-switch mr-3">
<input type="checkbox" class="custom-control-input" v-model="set.separator" id="customSwitch2">
<label class="custom-control-label" for="customSwitch2">分隔符(-</label>
</div>
</div>
</div>
<div class="col-6 col-md-3 my-1">
<div class="preview-block">
<div class="custom-control custom-switch mr-3">
<input type="checkbox" class="custom-control-input" v-model="set.aggregation" id="customSwitch3">
<label class="custom-control-label" for="customSwitch3">需要{}</label>
</div>
</div>
</div>
<div class="col-6 col-md-3 my-1">
<div class="preview-block">
<div class="custom-control custom-switch mr-3">
<input type="checkbox" class="custom-control-input" v-model="set.base64" id="customSwitch4">
<label class="custom-control-label" for="customSwitch4">转Base64</label>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="form-label">生成数量:</label>
<div class="form-control-wrap">
<input type="number" v-model="set.quantity" placeholder="需要生成的数量" min="1" class="form-control">
</div>
</div>
<button class="btn btn-dim btn-outline-primary btn-block card-link" @click="generate">
生成
</button>
<div class="form-group mt-3">
<label class="form-label">结果:</label>
<div class="form-control-wrap">
<textarea v-model="result" id="output" class="form-control" rows="5"></textarea>
</div>
<div class="text-center"><button class="btn btn-sm btn-outline-light" @click="copy"><em class="icon ni ni-copy"></em>点此复制</button></div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script src="{$cdn_cdnjs}vue/2.6.14/vue.min.js"></script>
<script>
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
new Vue({
el: '#app',
data: {
set: {
upcase: false,
separator: true,
aggregation: false,
base64: false,
quantity: 1,
},
result: '',
},
methods: {
generate() {
let arr = [];
for (let i = 0; i < this.set.quantity; i++) {
var uuid = uuidv4();
if (this.set.upcase) {
uuid = uuid.toUpperCase()
}
if (!this.set.separator) {
uuid = uuid.replaceAll('-', '')
}
if (this.set.aggregation) {
uuid = '{'+uuid+'}'
}
if (this.set.base64) {
uuid = btoa(encodeURIComponent(uuid).replace(/%([0-9A-F]{2})/g,
function toSolidBytes(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
arr.push(uuid)
}
this.result = arr.join('\n');
},
copy(){
$("#output").select();
document.execCommand("Copy");
layer.msg('复制成功', {icon:1, time:600})
}
},
})
</script>
{/block}