使用带有十六进制编码的加密 js 对字符串进行加密,使其对 url 友好



我正在使用白利糖度的crypto-js。我在下面有这个函数来处理纯文本的加密。

import CryptoJS from 'crypto-js'
import AES from 'crypto-js/aes'
const SECRET = 'I am batman'
const plainText = 'This is Sparta!'
export function enc(plainText){
// returns something like this U2FsdGVkX184He5Rp991JYAiCSdTwfZs8T3kJUk3zAc=  
// but with random `/` and I dont want that
// I want it to be Hex but .toString(CryptoJs.enc.Hex) 
// is not working, it just returns an '' empty string
// it's a string, I checked using typeof
return AES.encrypt(plainText, SECRET).toString();
}

如何使 enc(字符串) 返回一个对 url 友好的Hex值?

您可能希望执行以下操作:

export function dec(cipherText){
var bytes = CryptoJS.AES.decrypt(cipherText, SECRET);
var hex = bytes.toString(CryptoJS.enc.Hex);
var plain = bytes.toString(CryptoJS.enc.Utf8);
return [hex, plain];
}

这将采用加密的base64字符串,并将返回解密的明文和hexadecimal

编辑:关于您的评论和编辑的问题:

const SECRET = 'I am batman'
function enc(plainText){
var b64 = CryptoJS.AES.encrypt(plainText, SECRET).toString();
var e64 = CryptoJS.enc.Base64.parse(b64);
var eHex = e64.toString(CryptoJS.enc.Hex);
return eHex;
}
function dec(cipherText){
var reb64 = CryptoJS.enc.Hex.parse(cipherText);
var bytes = reb64.toString(CryptoJS.enc.Base64);
var decrypt = CryptoJS.AES.decrypt(bytes, SECRET);
var plain = decrypt.toString(CryptoJS.enc.Utf8);
return plain;
}

最终结果采用base64字符串,使其hexadecimal并返回解密的字符串。

最新更新