结合当前的编码方式,代码流程如下:
1、转换可用密钥
2、根据密钥生成加密器
3、加密
整体代码如下:
import cryptoFramework from '@ohos.security.cryptoFramework';
import util from '@ohos.util';
function stringToUint8Array(str, len=null) {
let arr = [];
if (len == null) {
len = str.length
}
for (let i = 0; i < len; i++) {
if (str.length > i) {
arr.push(str.charCodeAt(i))
} else {
arr.push(0)
}
}
return new Uint8Array(arr);
}
function aesECBEncrypt(plaintext, key) {
let cipherAlgName = 'AES128|ECB|PKCS7';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')
let cipher;
return symKeyGenerator.convertKey({
data: stringToUint8Array(key, 16)
}).then(symKey => {
try {
cipher = cryptoFramework.createCipher(cipherAlgName);
console.info(`xx cipher algName: ${cipher.algName}`);
return cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null)
} catch (error) {
console.error(`xx createCipher failed, ${error.code}, ${error.message}`);
return null
}
}).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)
})
})
}
调用方式:
aesECBEncrypt('000','1111').then(res=>{
console.log('aesECBEncrypt is ' + res)
}).catch(err => {
console.log('aesECBEncrypt catch ' + err)
})
解密部分
结合当前的编码方式,代码流程如下:
1、转换可用密钥
2、根据密钥生成加密器
3、解密
整体代码如下:
import cryptoFramework from '@ohos.security.cryptoFramework';
import util from '@ohos.util';
function uint8ArrayToString(array) {
let arrayString = '';
for (let i = 0; i < array.length; i++) {
arrayString += String.fromCharCode(array[i]);
}
return arrayString;
}
function aesECBDecrypt(encrypttext, key) {
let cipherAlgName = 'AES128|ECB|PKCS7';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')
let cipher;
return symKeyGenerator.convertKey({
data: stringToUint8Array(key, 16)
}).then(symKey => {
try {
cipher = cryptoFramework.createCipher(cipherAlgName);
console.info(`xx cipher algName: ${cipher.algName}`);
return cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null)
} catch (error) {
console.error(`xx createCipher failed, ${error.code}, ${error.message}`);
return null
}
}).then(() => {
let base64 = new util.Base64Helper();
let result = base64.decodeSync(encrypttext);
return cipher.doFinal({
data: result
})
}).then(output => {
let result = uint8ArrayToString(output.data)
return new Promise(resolve => {
resolve(result)
})
}).catch(err => {
return new Promise((_, reject) => {
reject(err)
})
})
}
调用方式如下:
aesECBDecrypt('v0ADs4+sKsM2FOdqz9rCQw==','1111').then(res=>{
console.log('aesECBDecrypt is ' + res)
}).catch(err => {
console.log('aesECBDecrypt catch ' + err)
})
参考文档:华为开发者联盟
更多关于HarmonyOS 鸿蒙Next ArkTS怎样使用加密算法对数据进行加密?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用ArkTS进行数据加密可以通过@ohos.security.cryptoFramework
模块实现。该模块提供了对称加密、非对称加密、哈希算法等加密功能。
-
对称加密:使用
cryptoFramework.createSymKeyGenerator
生成对称密钥,然后通过cryptoFramework.createCipher
进行加密和解密操作。支持的对称加密算法包括AES、3DES等。 -
非对称加密:使用
cryptoFramework.createAsyKeyGenerator
生成非对称密钥对,然后通过cryptoFramework.createCipher
进行加密和解密操作。支持的非对称加密算法包括RSA、ECC等。 -
哈希算法:使用
cryptoFramework.createHash
进行哈希计算,支持的哈希算法包括SHA256、SHA384、SHA512等。
以下是一个使用AES对称加密的示例代码:
import cryptoFramework from '@ohos.security.cryptoFramework';
async function aesEncrypt(plainText: string, key: cryptoFramework.SymKey): Promise<Uint8Array> {
let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, null);
let input: cryptoFramework.DataBlob = { data: new TextEncoder().encode(plainText) };
let output = await cipher.doFinal(input);
return output.data;
}
async function aesDecrypt(cipherText: Uint8Array, key: cryptoFramework.SymKey): Promise<string> {
let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
await cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, key, null);
let input: cryptoFramework.DataBlob = { data: cipherText };
let output = await cipher.doFinal(input);
return new TextDecoder().decode(output.data);
}
在这个示例中,aesEncrypt
函数用于加密数据,aesDecrypt
函数用于解密数据。cryptoFramework.createCipher
用于创建加密器,init
方法初始化加密模式,doFinal
方法执行加密或解密操作。