提交 703eed53 编写于 作者: 常浩然 提交者: ninecents

fix password mode & change sm2 cipher encode

上级 56b66e8c
...@@ -93,33 +93,45 @@ export default { ...@@ -93,33 +93,45 @@ export default {
case "RC4": case "RC4":
case "Rabbit": case "Rabbit":
case "TripleDES": 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") { if (v === "encrypt") {
output = crypto[this.current.type].encrypt( if (this.current.keyFormat !== "Password") {
this.current.input, output = crypto[this.current.type].encrypt(
key, // todo 后续可以考虑支持原文输入的编码格式,以便应对一些二进制格式
{ this.current.input,
iv: crypto.enc.Hex.parse(this.current.iv), // 转换为 WordArray 形式作为密钥传入
mode: crypto.mode[this.current.mode], crypto.enc[this.current.keyFormat].parse(this.current.password),
padding: crypto.pad[this.current.padding] {
} // IV 要求为 Hex,按照 Hex 解析为 WordArray
).ciphertext; iv: crypto.enc.Hex.parse(this.current.iv),
mode: crypto.mode[this.current.mode],
padding: crypto.pad[this.current.padding]
}
).ciphertext;
} else {
// 兼容 crypto-js 的密码模式
output = crypto[this.current.type].encrypt(this.current.input, this.current.password).toString();
}
} else { } else {
let cipherParams = CryptoJS.lib.CipherParams.create({ if (this.current.keyFormat !== "Password") {
ciphertext: crypto.enc.Hex.parse(this.current.input) // crypto-js 要求解密时传入为 CipherParams,使用 CipherText 构建 CipherParams
}); let cipherData = CryptoJS.lib.CipherParams.create({
output = crypto[this.current.type].decrypt( ciphertext: crypto.enc.Hex.parse(this.current.input)
cipherParams, });
key, output = crypto[this.current.type].decrypt(
{ cipherData,
iv: crypto.enc.Hex.parse(this.current.iv), // 转换为 WordArray 形式作为密钥传入
mode: crypto.mode[this.current.mode], crypto.enc[this.current.keyFormat].parse(this.current.password),
padding: crypto.pad[this.current.padding] {
} // IV 要求为 Hex,按照 Hex 解析为 WordArray
).toString(crypto.enc.Utf8); iv: crypto.enc.Hex.parse(this.current.iv),
mode: crypto.mode[this.current.mode],
padding: crypto.pad[this.current.padding]
}
).toString(crypto.enc.Utf8);
} else {
// 兼容 crypto-js 的密码模式
output = crypto[this.current.type].decrypt(this.current.input, this.current.password).toString(crypto.enc.Utf8);
}
} }
break; break;
case "SM2": case "SM2":
...@@ -129,24 +141,25 @@ export default { ...@@ -129,24 +141,25 @@ export default {
this.current.password, this.current.password,
this.current.sm2CipherMode this.current.sm2CipherMode
); );
output = crypto.enc.Base64.stringify(crypto.enc.Hex.parse(output))
} else { } else {
let inputHex = crypto.enc.Hex.stringify(crypto.enc.Base64.parse(this.current.input));
output = sm2.doDecrypt( output = sm2.doDecrypt(
inputHex, this.current.input,
this.current.password, this.current.password,
this.current.sm2CipherMode this.current.sm2CipherMode
); );
} }
break; break;
case "SM4": case "SM4":
// sm-crypto 要求传入的 key 为 Hex 格式,因此对于非 Hex 格式的数据进行转换
let sm4Key = this.current.password; let sm4Key = this.current.password;
if(this.current.keyFormat === "Base64") { if (this.current.keyFormat === "Base64") {
sm4Key = crypto.enc.Hex.stringify(crypto.enc[this.current.keyFormat].parse(this.current.password)); sm4Key = crypto.enc.Hex.stringify(crypto.enc[this.current.keyFormat].parse(this.current.password));
} else if(this.current.keyFormat === "Password") { } else if(this.current.keyFormat === "Password") {
// 如果是 Password,按照 Utf8 编码进行处理,转换为 Hex 格式
// 注意因为库的区别,password 模式跟 crypto-js 的处理不一样
sm4Key = crypto.enc.Hex.stringify(crypto.enc.Utf8.parse(this.current.password)); sm4Key = crypto.enc.Hex.stringify(crypto.enc.Utf8.parse(this.current.password));
} }
if(v === "encrypt") { if(v === "encrypt") {
// SM4 加密 // SM4 加密
output = sm4.encrypt( output = sm4.encrypt(
...@@ -154,6 +167,7 @@ export default { ...@@ -154,6 +167,7 @@ export default {
sm4Key, sm4Key,
{ {
mode: this.current.mode.toLowerCase(), mode: this.current.mode.toLowerCase(),
// sm-crypto 传入的 iv 为 Hex 格式
iv: this.current.iv, iv: this.current.iv,
padding: this.current.padding padding: this.current.padding
} }
...@@ -165,6 +179,7 @@ export default { ...@@ -165,6 +179,7 @@ export default {
sm4Key, sm4Key,
{ {
mode: this.current.mode.toLowerCase(), mode: this.current.mode.toLowerCase(),
// sm-crypto 传入的 iv 为 Hex 格式
iv: this.current.iv, iv: this.current.iv,
padding: this.current.padding padding: this.current.padding
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册