HarmonyOS鸿蒙Next中如何生成一个aes的字符串加密算法呢
HarmonyOS鸿蒙Next中如何生成一个aes的字符串加密算法呢 您好,我们项目中需要用aes128加密一个字符串,密码为:“a1b2c3d4e5012345”; 填充为 PKCS1Padding;没有偏移量,输出结果也是一个字符串,网站(http://tool.chacuo.net/cryptaes)上的效果如附件;如何用arkts实现加密算法方法呢?官方给的文档我没看懂怎么用?
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { util } from '@kit.ArkTS';
/**
* aes_ecb_pkcs5
*/
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
@State enText: string = '';
@State deText: string = '';
@State enTargetText: string = 'FzAvEpEPx0Cc+wzKUAh6+WVlSx3DY+MVdZw3eCxBuY8=';
@State deTargetText: string = '~miaocc.dev-s.yunduoketang.cn';
base = new util.Base64Helper();
async aesEncrypt(text: string, puKey: string): Promise<string> {
let globalResult = ""
try {
//这里已AES加解密为例支持AES、SM4、3DES
let cipherAlgName = 'AES128|ECB|PKCS5';
// 创建加解密对象
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
//这里已AES加解密为例支持AES、SM4、3DES
let symAlgName = 'AES128';
//创建密钥对象
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
let textEncoder = new util.TextEncoder();
let buffer = new ArrayBuffer(20);
let res = new Uint8Array(buffer);
res = textEncoder.encodeInto(puKey);
let keyBlob: cryptoFramework.DataBlob = { data: res }
//导入外部密钥
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
//初始化
await globalCipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, promiseSymKey, null);
//加密
let result = await globalCipher.doFinal({ data: this.stringToUint8Array(text) })
//将加密结果转换为base64格式,用于保存或者传递
globalResult = this.base.encodeToStringSync(result.data);
} catch (err) {
console.log(err.message)
}
return globalResult;
}
// 解密
async aesDecrypt(text: string, key: string) {
let globalResult = ""
try {
//这里已AES加解密为例支持AES、SM4、3DES
let cipherAlgName = 'AES128|ECB|PKCS5';
// 创建加解密对象
let globalCipher = cryptoFramework.createCipher(cipherAlgName);
//这里已AES加解密为例支持AES、SM4、3DES
let symAlgName = 'AES128';
//创建密钥对象
let symKeyGenerator = cryptoFramework.createSymKeyGenerator(symAlgName);
// let dataUint8Array = base.decodeSync(key)
let textEncoder = new util.TextEncoder();
let buffer = new ArrayBuffer(20);
let res = new Uint8Array(buffer);
res = textEncoder.encodeInto(key);
let keyBlob: cryptoFramework.DataBlob = { data: res }
//导入外部密钥
let promiseSymKey = await symKeyGenerator.convertKey(keyBlob)
await globalCipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, promiseSymKey, null);
let plainText: cryptoFramework.DataBlob = { data: this.base.decodeSync(text) }
let result = await globalCipher.doFinal(plainText)
//将解密后的结果result解码之后得到明文
globalResult = this.uint8ArrayToString(result.data);
console.log("解密后的明文==》" + globalResult)
this.deText = globalResult
} catch (err) {
console.log(err.message)
}
}
uint8ArrayToString(dataArray: Uint8Array) {
let dataString = '';
for (let i = 0; i < dataArray.length; i++) {
dataString += String.fromCharCode(dataArray[i]);
}
return dataString;
}
stringToUint8Array(str: string): Uint8Array {
let arr: number[] = [];
for (let i = 0, j = str.length; i < j; ++i) {
arr.push(str.charCodeAt(i));
}
let tmpUint8Array = new Uint8Array(arr);
return tmpUint8Array;
}
build() {
Column({space:10}) {
Text(`加密结果:${this.enText}`)
Text(`加密匹配结果:${this.enText === this.enTargetText}`)
Button('加密').onClick(async () => {
this.enText = await this.aesEncrypt('~miaocc.dev-s.yunduoketang.cn', 'a1b2c3d4e5012345')
})
Button('解密').onClick(async () => {
await this.aesDecrypt(this.enText, 'a1b2c3d4e5012345')
})
Text(`解密结果:${this.deText}`)
Text(`解密匹配结果:${this.deText === this.deTargetText}`)
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
}
}
更多关于HarmonyOS鸿蒙Next中如何生成一个aes的字符串加密算法呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,生成一个AES字符串加密算法可以使用ohos.security.crypto
模块提供的API。以下是一个简单的示例代码,展示如何使用AES加密字符串:
import crypto from '@ohos.security.crypto';
function aesEncrypt(plainText: string, key: string): string {
// 将密钥转换为Uint8Array
const keyBytes = new TextEncoder().encode(key);
// 创建AES密钥对象
const aesKey = crypto.createSymKeyGenerator('AES').convertKey(keyBytes);
// 创建AES加密器
const cipher = crypto.createCipher('AES/CBC/PKCS7');
// 初始化加密器
cipher.init(aesKey, 'AES/CBC/PKCS7');
// 加密数据
const plainBytes = new TextEncoder().encode(plainText);
const encryptedBytes = cipher.doFinal(plainBytes);
// 将加密后的数据转换为Base64字符串
return btoa(String.fromCharCode(...new Uint8Array(encryptedBytes)));
}
// 使用示例
const encryptedText = aesEncrypt('Hello, HarmonyOS!', 'my-secret-key');
console.log(encryptedText);
这段代码定义了aesEncrypt
函数,接受明文和密钥作为输入,返回加密后的Base64字符串。crypto.createSymKeyGenerator
用于生成AES密钥,crypto.createCipher
用于创建加密器,cipher.init
初始化加密器,cipher.doFinal
执行加密操作。
在HarmonyOS鸿蒙Next中,生成AES字符串加密算法可以使用javax.crypto
包中的类。首先,初始化KeyGenerator
生成AES密钥,然后使用Cipher
类进行加密。示例如下:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;
public class AESExample {
public static void main(String[] args) throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128位密钥
SecretKey secretKey = keyGen.generateKey();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
String original = "Hello, HarmonyOS!";
byte[] encrypted = cipher.doFinal(original.getBytes());
String encryptedString = Base64.getEncoder().encodeToString(encrypted);
System.out.println("Encrypted: " + encryptedString);
}
}
此代码生成AES密钥并加密字符串,输出Base64编码的加密结果。