Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
夜猫逐梦
1024程序员开源挑战赛
提交
56b66e8c
1
1024程序员开源挑战赛
项目概览
夜猫逐梦
/
1024程序员开源挑战赛
与 Fork 源项目一致
Fork自
GitCode / 1024程序员开源挑战赛(10.23-11.14)
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
1
1024程序员开源挑战赛
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
56b66e8c
编写于
4月 19, 2022
作者:
常
常浩然
提交者:
ninecents
10月 23, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cipher support select mode and padding
上级
c09d7c97
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
100 addition
and
21 deletion
+100
-21
src/views/tool/encrypt.vue
src/views/tool/encrypt.vue
+100
-21
未找到文件。
src/views/tool/encrypt.vue
浏览文件 @
56b66e8c
...
...
@@ -2,21 +2,57 @@
<heightResize
ignore
:append=
"['.page-option-block']"
@
resize=
"resize"
>
<autoHeightTextarea
v-model=
"current.input"
:height=
"inputHeight"
:placeholder=
"$t('encrypt_input')"
/>
<option-block
class=
"page-option-block"
>
<FormItem>
<Select
v-model=
"current.type"
style=
"width:200px"
>
<Form
:model=
"formItem"
label-position=
"top"
>
<Form-item
label=
"算法: "
>
<Select
v-model=
"current.type"
>
<Option
v-for=
"v in type"
:value=
"v"
:key=
"v"
>
{{
v
}}
</Option>
</Select>
</FormItem>
<FormItem>
<Input
v-model=
"current.password"
:placeholder=
"$t('encrypt_password')"
></Input>
</FormItem>
<FormItem
v-if=
"current.type === 'SM2'"
>
<Select
v-model=
"current.sm2CipherMode"
style=
"width:100px"
>
</Form-item>
<Form-item
label=
"密钥: "
>
<Select
v-model=
"current.keyFormat"
>
<Option
value=
"Hex"
>
Hex
</Option>
<Option
value=
"Base64"
>
Base64
</Option>
<Option
value=
"Password"
>
Password
</Option>
</Select>
<Input
v-model=
"current.password"
:placeholder=
"$t('encrypt_password')"
type=
"textarea"
:autosize=
"
{minRows: 2, maxRows: 5}">
</Input>
</Form-item>
<Form-item
label=
"IV 向量(Hex 格式): "
>
<Input
v-model=
"current.iv"
:placeholder=
"$t('iv')"
type=
"textarea"
:autosize=
"
{minRows: 3, maxRows: 5}">
</Input>
</Form-item>
<Form-item
label=
"加密模式: "
v-if=
"current.type === 'SM2'"
>
<Select
v-model=
"current.sm2CipherMode"
>
<Option
value=
"C1C3C2"
>
C1C3C2
</Option>
<Option
value=
"C1C2C3"
>
C1C2C3
</Option>
</Select>
</FormItem>
<FormItem>
</Form-item>
<Form-item
label=
"加密模式: "
v-else-if=
"current.type === 'SM4'"
>
<Select
v-model=
"current.mode"
>
<Option
value=
"ecb"
>
ECB
</Option>
<Option
value=
"cbc"
>
CBC
</Option>
</Select>
<Select
v-model=
"current.padding"
>
<Option
value=
"pkcs#7"
>
Pkcs7
</Option>
<Option
value=
"none"
>
NoPadding
</Option>
</Select>
</Form-item>
<Form-item
label=
"加密模式: "
v-else
>
<Select
v-model=
"current.mode"
>
<Option
value=
"ECB"
>
ECB
</Option>
<Option
value=
"CBC"
>
CBC
</Option>
<Option
value=
"CFB"
>
CFB
</Option>
<Option
value=
"OFB"
>
OFB
</Option>
<Option
value=
"CTR"
>
CTR
</Option>
</Select>
<Select
v-model=
"current.padding"
>
<Option
value=
"Pkcs7"
>
Pkcs7
</Option>
<Option
value=
"Iso97971"
>
Iso97971
</Option>
<Option
value=
"AnsiX923"
>
AnsiX923
</Option>
<Option
value=
"Iso10126"
>
Iso10126
</Option>
<Option
value=
"ZeroPadding"
>
ZeroPadding
</Option>
<Option
value=
"NoPadding"
>
NoPadding
</Option>
</Select>
</Form-item>
<Form-item>
<ButtonGroup>
<Button
type=
"primary"
@
click=
"handle('encrypt')"
>
{{
$t
(
'
encrypt_encrypt
'
)
}}
</Button>
<Button
type=
"primary"
@
click=
"handle('decrypt')"
>
{{
$t
(
'
encrypt_decrypt
'
)
}}
</Button>
...
...
@@ -24,7 +60,8 @@
{{
$t
(
'
encrypt_generate_secret_key
'
)
}}
</Button>
</ButtonGroup>
</FormItem>
</Form-item>
</Form>
</option-block>
<autoHeightTextarea
:value=
"current.output"
:height=
"outputHeight"
:placeholder=
"$t('encrypt_output')"
/>
</heightResize>
...
...
@@ -33,6 +70,7 @@
import
crypto
from
"
crypto-js
"
import
heightResize
from
"
./components/heightResize
"
;
import
autoHeightTextarea
from
"
./components/autoHeightTextarea
"
;
import
{
CryptoJS
}
from
'
jsrsasign
'
;
export
default
{
components
:
{
...
...
@@ -55,15 +93,32 @@ export default {
case
"
RC4
"
:
case
"
Rabbit
"
:
case
"
TripleDES
"
:
let
key
=
this
.
current
.
password
;
if
(
this
.
current
.
keyFormat
!==
"
Password
"
)
{
key
=
crypto
.
enc
[
this
.
current
.
keyFormat
].
parse
(
this
.
current
.
password
);
}
if
(
v
===
"
encrypt
"
)
{
output
=
crypto
[
this
.
current
.
type
].
encrypt
(
this
.
current
.
input
,
this
.
current
.
password
).
toString
();
key
,
{
iv
:
crypto
.
enc
.
Hex
.
parse
(
this
.
current
.
iv
),
mode
:
crypto
.
mode
[
this
.
current
.
mode
],
padding
:
crypto
.
pad
[
this
.
current
.
padding
]
}
).
ciphertext
;
}
else
{
let
cipherParams
=
CryptoJS
.
lib
.
CipherParams
.
create
({
ciphertext
:
crypto
.
enc
.
Hex
.
parse
(
this
.
current
.
input
)
});
output
=
crypto
[
this
.
current
.
type
].
decrypt
(
this
.
current
.
input
,
this
.
current
.
password
cipherParams
,
key
,
{
iv
:
crypto
.
enc
.
Hex
.
parse
(
this
.
current
.
iv
),
mode
:
crypto
.
mode
[
this
.
current
.
mode
],
padding
:
crypto
.
pad
[
this
.
current
.
padding
]
}
).
toString
(
crypto
.
enc
.
Utf8
);
}
break
;
...
...
@@ -86,14 +141,34 @@ export default {
}
break
;
case
"
SM4
"
:
let
sm4Key
=
this
.
current
.
password
;
if
(
this
.
current
.
keyFormat
===
"
Base64
"
)
{
sm4Key
=
crypto
.
enc
.
Hex
.
stringify
(
crypto
.
enc
[
this
.
current
.
keyFormat
].
parse
(
this
.
current
.
password
));
}
else
if
(
this
.
current
.
keyFormat
===
"
Password
"
)
{
sm4Key
=
crypto
.
enc
.
Hex
.
stringify
(
crypto
.
enc
.
Utf8
.
parse
(
this
.
current
.
password
));
}
if
(
v
===
"
encrypt
"
)
{
// SM4 加密,将输出转换为 base64 格式,与 AES 对齐
output
=
sm4
.
encrypt
(
this
.
current
.
input
,
this
.
current
.
password
);
output
=
crypto
.
enc
.
Base64
.
stringify
(
crypto
.
enc
.
Hex
.
parse
(
output
))
// SM4 加密
output
=
sm4
.
encrypt
(
this
.
current
.
input
,
sm4Key
,
{
mode
:
this
.
current
.
mode
.
toLowerCase
(),
iv
:
this
.
current
.
iv
,
padding
:
this
.
current
.
padding
}
);
}
else
{
// SM4 解密,sm-crypto 要求输入为 hex,将 base64 转换为 hex 作为输入
let
inputHex
=
crypto
.
enc
.
Hex
.
stringify
(
crypto
.
enc
.
Base64
.
parse
(
this
.
current
.
input
));
output
=
sm4
.
decrypt
(
inputHex
,
this
.
current
.
password
);
// SM4 解密
output
=
sm4
.
decrypt
(
this
.
current
.
input
,
sm4Key
,
{
mode
:
this
.
current
.
mode
.
toLowerCase
(),
iv
:
this
.
current
.
iv
,
padding
:
this
.
current
.
padding
}
);
}
}
if
(
!
output
)
{
...
...
@@ -144,6 +219,10 @@ export default {
current
:
{
input
:
""
,
password
:
""
,
keyFormat
:
"
Hex
"
,
iv
:
""
,
mode
:
"
ECB
"
,
padding
:
"
Pkcs7
"
,
sm2CipherMode
:
"
C1C3C2
"
,
output
:
""
,
type
:
"
AES
"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录