HarmonyOS鸿蒙Next ArkTS中如何使用AES加密和解密
HarmonyOS鸿蒙Next ArkTS中如何使用AES加密和解密 ArkTs中如何使用AES加密和解密
3 回复
AES加解密demo:
```typescript
import { aesEncrypt, aesDecrypt } from './Test3';
[@Component](/user/Component)
struct Test {
[@State](/user/State) plainText: string = 'Hello World';
[@State](/user/State) plainText1: string = '';
[@State](/user/State) ciphertext1: string = '';
[@State](/user/State) iv: string = '1234564512345645';
[@State](/user/State) keys: string = 'CjZwwvt13DJTTOCD0/z1cw==';
scroller: Scroller = new Scroller()
build() {
Stack({ alignContent: Alignment.TopStart }) {
Scroll(this.scroller) {
Column() {
Text("AES128加解密")
.fontSize(50)
.fontWeight(FontWeight.Bold)
Column() {
Text("待加密的内容")
.fontSize(15)
.fontWeight(FontWeight.Bold)
TextInput({ text: this.plainText }).onChange(value => {
this.plainText = value
})
Text("密钥")
.fontSize(15)
.fontWeight(FontWeight.Bold)
TextInput({ text: this.keys }).onChange(value => {
this.keys = value
})
Text("偏移量")
.fontSize(15)
.fontWeight(FontWeight.Bold)
TextInput({ text: this.iv }).onChange(value => {
this.iv = value
})
Button("AES128|ECB|PKCS7加密").onClick(async () => {
this.ciphertext1 = await aesEncrypt(this.plainText, this.keys)
console.log("aes Encrypt = " + this.ciphertext1);
})
TextInput({ text: this.ciphertext1 })
Button("ECB解密").onClick(async () => {
this.plainText1 = await aesDecrypt(this.ciphertext1, this.keys)
})
TextInput({ text: this.plainText1 })
}
.width('100%')
}
}
.scrollable(ScrollDirection.Vertical) // 滚动方向纵向
.scrollBar(BarState.On) // 滚动条常驻显示
.scrollBarColor(Color.Gray) // 滚动条颜色
.scrollBarWidth(10) // 滚动条宽度
.friction(0.6)
.edgeEffect(EdgeEffect.None)
.onScroll((xOffset: number, yOffset: number) => {
console.info(xOffset + ' ' + yOffset)
})
.onScrollEdge((side: Edge) => {
console.info('To the edge')
})
.onScrollStop(() => {
console.info('Scroll Stop')
})
}
}
}
//加密
import { cryptoFramework } from '[@kit](/user/kit).CryptoArchitectureKit';
import { base, stringToUint8Array, uint8ArrayToString } from './Test4';
export async function aesEncrypt(text: string, puKey: string): Promise<string> {
let globalResult = ""
try {
let cipherAlgName = 'AES128|ECB|PKCS7';
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
let symAlgName = 'AES128';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
let dataUint8Array = base.decodeSync(puKey)
let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array }
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, null);
let result = await globalCipher.doFinal({ data: stringToUint8Array(text) })
globalResult = base.encodeToStringSync(result.data);
} catch (err) {
console.log(err.message)
}
return globalResult;
}
// 解密
export async function aesDecrypt(text: string, key: string) {
let globalResult = ""
try {
let cipherAlgName = 'AES128|ECB|PKCS7';
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
let symAlgName = 'AES128';
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
let dataUint8Array = base.decodeSync(key)
let keyBlob: cryptoFramework.DataBlob = { data: dataUint8Array }
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
await globalCipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, promiseSymKey, null);
let plainText: cryptoFramework.DataBlob = { data: base.decodeSync(text) }
let result = await globalCipher.doFinal(plainText)
globalResult = uint8ArrayToString(result.data);
console.log("解密后的明文==》" + globalResult)
} catch (err) {
console.log(err.message)
} finally {
return globalResult
}
}
import buffer from '[@ohos](/user/ohos).buffer';
import util from '[@ohos](/user/ohos).util';
export function uint8ArrayToHexStr(data: Uint8Array): string {
return buffer.from(data).toString('hex');
}
//十六进制转Uint8Array
export function HexStrTouint8Array(data: string): Uint8Array {
return new Uint8Array(buffer.from(data, 'hex').buffer);
}
export const base = new util.Base64Helper();
// 字符串转成字节流
export function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str,'utf-8').buffer);
}
// 字节流转成可理解的字符串
export function uint8ArrayToString(array:Uint8Array) {
let out: string = "";
let index: number = 0;
let len: number = array.length;
while (index < len) {
let character = array[index++];
switch(character >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
out += String.fromCharCode(character);
break;
case 12:
case 13:
out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F));
break;
case 14:
out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | ((array[index++] & 0x3F) << 0));
break;
default:
break;
}
}
return out;
}
更多关于HarmonyOS鸿蒙Next ArkTS中如何使用AES加密和解密的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用ArkTS进行AES加密和解密可以通过cryptoFramework
模块实现。首先,导入cryptoFramework
模块:
import cryptoFramework from '@ohos.security.cryptoFramework';
创建对称密钥生成器并生成AES密钥:
let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
let keyBlob = symKeyGenerator.generateSymKey();
使用生成的密钥进行加密:
let cipher = cryptoFramework.createCipher('AES256|ECB|PKCS7');
cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyBlob, null);
let plainText = 'Hello, HarmonyOS!';
let input = { data: stringToUint8Array(plainText) };
cipher.doFinal(input).then(data => {
console.info('Encrypted data:', data.data);
});
使用相同的密钥进行解密:
cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, keyBlob, null);
let encryptedData = { data: data.data };
cipher.doFinal(encryptedData).then(data => {
console.info('Decrypted data:', uint8ArrayToString(data.data));
});
辅助函数stringToUint8Array
和uint8ArrayToString
用于字符串与Uint8Array
之间的转换:
function stringToUint8Array(str) {
let arr = new Uint8Array(str.length);
for (let i = 0; i < str.length; i++) {
arr[i] = str.charCodeAt(i);
}
return arr;
}
function uint8ArrayToString(arr) {
return String.fromCharCode.apply(null, arr);
}
通过以上步骤,可以在ArkTS中实现AES加密和解密。
在HarmonyOS鸿蒙Next的ArkTS中,使用AES加密和解密可以通过@ohos.security.crypto
模块实现。首先,创建AesCipher
实例,设置密钥和加密模式(如AES-GCM)。然后,调用encrypt
方法进行加密,或调用decrypt
方法进行解密。以下是示例代码:
import crypto from '@ohos.security.crypto';
const key = new Uint8Array([...]); // 32字节密钥
const data = new Uint8Array([...]); // 待加密数据
const aesCipher = crypto.createAesCipher('AES256|GCM|PKCS7'); // 创建AES实例
aesCipher.init(crypto.CryptoMode.ENCRYPT_MODE, key); // 初始化加密模式
const encrypted = aesCipher.doFinal(data); // 加密数据
aesCipher.init(crypto.CryptoMode.DECRYPT_MODE, key); // 初始化解密模式
const decrypted = aesCipher.doFinal(encrypted); // 解密数据
确保密钥长度符合AES标准(128/192/256位),并处理异常情况。