HarmonyOS 鸿蒙Next 如何给加解密方法拓展加解密文件功能?

发布于 1周前 作者 yibo5220 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何给加解密方法拓展加解密文件功能?

// SM4 加密
async SM4Encrypt(plainText: string, key: string): Promise<string> {
let cipherKey = this.ivMap[key][0]
let cipherIv = this.ivMap[key][1]

let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128');
let cipher = cryptoFramework.createCipher(cipherIv ? "SM4_128|CBC|PKCS7" : "SM4_128|ECB|PKCS7");
let input: cryptoFramework.DataBlob = {
data: new Uint8Array(buffer.from(plainText, 'utf-8').buffer)
};
try {
let iv: cryptoFramework.IvParamsSpec | null = null
if (cipherIv) {
iv = {
iv: {
data: new Uint8Array(buffer.from(cipherIv, 'hex').buffer)
},
algName: 'IvParamsSpec'
}
}
let symKey = await sm4Generator.convertKey({
data: new Uint8Array(buffer.from(cipherKey, 'hex').buffer)
});
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv);
let cipherData = await cipher.doFinal(input)
return new util.Base64Helper().encodeToStringSync(cipherData.data)
} catch (err) {
console.log(err)
}

return "";
}

// SM4 解密
async SM4Decrypt(ciphertext: string, key: string) {
let cipherKey = this.ivMap[key][0]
let cipherIv = this.ivMap[key][1]

const base64 = new util.Base64Helper()
let sm4Generator = cryptoFramework.createSymKeyGenerator("SM4_128")
let decoder = cryptoFramework.createCipher(cipherIv ? "SM4_128|CBC|PKCS7" : "SM4_128|ECB|PKCS7");
//密文
let cipherData: cryptoFramework.DataBlob = {
data: base64.decodeSync(ciphertext)
};
//密钥
let keydata: cryptoFramework.DataBlob = {
data: new Uint8Array(buffer.from(cipherKey, 'hex').buffer)
};
let iv: cryptoFramework.IvParamsSpec | null = null
if (cipherIv) {
iv = {
iv: {
data: new Uint8Array(buffer.from(cipherIv, 'hex').buffer)
}, algName: 'IvParamsSpec'
}
}
let symKey = await sm4Generator.convertKey(keydata);
await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv);
let result = await decoder.doFinal(cipherData);
return buffer.from(result.data).toString('utf8')
}

更多关于HarmonyOS 鸿蒙Next 如何给加解密方法拓展加解密文件功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
在ArkTS中文件为Uint8Array类型,您可尝试在以上两个方法中取消String与Uint8Array的转义即可。

更多关于HarmonyOS 鸿蒙Next 如何给加解密方法拓展加解密文件功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next中,给加解密方法拓展加解密文件功能,可以通过以下步骤实现:

  1. 选择加解密算法:根据文件大小和安全性需求,选择合适的加解密算法,如AES、RSA等。AES适用于大量数据的加密传输,而RSA则常用于数字签名和少量数据的加密。

  2. 读取文件:使用系统提供的文件读取接口,将待加密或解密的文件内容读取到内存中。

  3. 进行加解密操作

    • 对于对称加密算法(如AES),使用cryptoFramework.createCipher创建Cipher实例,然后初始化并传入密钥和参数(如IV),再进行加密或解密操作。
    • 对于非对称加密算法(如RSA),需先生成密钥对,然后使用公钥加密、私钥解密,或使用私钥签名、公钥验签。
  4. 保存结果:将加密后的文件内容或解密后的明文保存到指定位置。

  5. 错误处理:在读取文件、加解密操作及保存结果过程中,需做好错误处理,确保程序的健壮性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部