HarmonyOS AES加密中文字符串,解密出来时空字符串
AES中文加密,解密出来的数据为空
com.hessi...nymocire D aes加密原文:, "{name:"张三"}"
com.hessi...nymocire I xx cipher algName: AES128|CBC|PKCS5
com.hessi...nymocire D aes加密数据:, ZkQQVV126FtQ/jaxWoKeGg==
com.hessi...nymocire I xx cipher algName: AES128|CBC|PKCS5
com.hessi...nymocire D aes解密数据:, {name:" "}
AES加解密代码如下:
/**
* Uint8Array 转 String
* @param input
*/
function uint8Array2String(input: Uint8Array) {
let textDecoder = util.TextDecoder.create("utf-8", { ignoreBOM: true })
return textDecoder.decodeWithStream(input, { stream: false });
}
// AES加密promise形式调用
async function aesCBCEncrypt(plaintext, key, iv): Promise<string> {
let cipherAlgName = 'AES128|CBC|PKCS5';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')
let ivParam: cryptoFramework.IvParamsSpec = {
algName: 'IvParamsSpec',
iv: {
data: stringToUint8Array(iv)
}
}
var cipher;
return symKeyGenerator.convertKey({
data: stringToUint8Array(key)
}).then(symKey => {
try {
cipher = cryptoFramework.createCipher(cipherAlgName);
console.info(`xx cipher algName: ${cipher.algName}`);
} catch (error) {
console.error(`xx createCipher failed, ${error.code}, ${error.message}`);
return null
}
return cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ivParam)
.then(() => {
return cipher.doFinal({
data: stringToUint8Array(plaintext)
})
})
.then(output => {
let base64 = new util.Base64Helper();
let result = base64.encodeToStringSync(output.data);
return new Promise((resolve) => {
resolve(result)
})
}).catch(err => {
return new Promise((_, reject) => {
reject(err)
})
})
}).catch(err => {
return new Promise((_, reject) => {
reject(err)
})
})
}
/**
* AES解密
* @param encrypttext
* @param key
* @param iv
* @returns
*/
async function aesCBCDecrypt(encrypttext, key, iv) {
let cipherAlgName = 'AES128|CBC|PKCS5'
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')
let ivParam: cryptoFramework.IvParamsSpec = {
algName: 'IvParamsSpec',
iv: {
data: stringToUint8Array(iv, 16)
}
}
var cipher;
return symKeyGenerator.convertKey({
data: stringToUint8Array(key, 16)
}).then(symKey => {
try {
cipher = cryptoFramework.createCipher(cipherAlgName);
console.info(`xx cipher algName: ${cipher.algName}`);
} catch (error) {
console.error(`xx createCipher failed, ${error.code}, ${error.message}`);
return null
}
return cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ivParam)
.then(() => {
let base64 = new util.Base64Helper();
let result = base64.decodeSync(encrypttext);
return cipher.doFinal({
data: result
})
})
.then(output => {
let result = uint8Array2String(output.data)
return new Promise((resolve) => {
resolve(result)
})
}).catch(err => {
return new Promise((_, reject) => {
reject(err)
})
})
}).catch(err => {
return new Promise((_, reject) => {
reject(err)
})
})
}
// 把密钥、明文等转换成输入数据需要的格式
function stringToUint8Array(str, len = null) {
let arr = [];
if (len == null) {
len = str.length
}
for (let i = 0; i < len; i++) {
arr.push(str.charCodeAt(i))
}
return new Uint8Array(arr);
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
中文字符串的编解码,有人知道吗?
909浏览 • 1回复 待解决
HarmonyOS对中文字符串进行base64加密 得到的结果异常
905浏览 • 1回复 待解决
MySQL 原生的aes_encrypt加密的Key为空字符串,怎么在代码里解密?
2366浏览 • 1回复 待解决
AES加解密长字符串是否需要分段
689浏览 • 1回复 待解决
关于加密字符串相关问题
517浏览 • 1回复 待解决
HarmonyOS 加密字符串格式转换
374浏览 • 1回复 待解决
HarmonyOS rdb删除一条数据,条件是msgId是空字符串,现在空字符串删除不掉
53浏览 • 1回复 待解决
HarmonyOS fontfamily设置空字符串是否使用默认字体
142浏览 • 1回复 待解决
检查字符串是否以给定的字符串开头
822浏览 • 1回复 待解决
字符串反射
251浏览 • 1回复 待解决
HarmonyOS RSA指定公钥或私钥字符串加密和解密
265浏览 • 1回复 待解决
HarmonyOS 十六进制字符转明文字符串
351浏览 • 1回复 待解决
HarmonyOS 字符串Md5加密问题
263浏览 • 1回复 待解决
检查字符串是否以给定的字符串结尾
636浏览 • 1回复 待解决
HarmonyOS 替换字符串
367浏览 • 1回复 待解决
HarmonyOS 字符串显示异常
712浏览 • 1回复 待解决
HarmonyOS字符串替换问题
1172浏览 • 1回复 待解决
ArkUI组件的字符串中如何实现字符串变量拼接
2821浏览 • 1回复 待解决
根据指定字符串,随机生成 指定长度的字符串
727浏览 • 1回复 待解决
HarmonyOS 如何通过纯字符串获取Hap内的字符串资源
353浏览 • 1回复 待解决
如何替换字符串中所有匹配的正则为给定的字符串
467浏览 • 1回复 待解决
HarmonyOS ASCII转字符串
284浏览 • 1回复 待解决
HarmonyOS 字符串转图片
361浏览 • 1回复 待解决
HarmonyOS 字符串编码问题
316浏览 • 1回复 待解决
HarmonyOS 替换字符串问题
416浏览 • 1回复 待解决
可以参考这个demo: