HarmonyOS鸿蒙Next中可不可以提供一下AES128加密和sm3国密加解密的方法
HarmonyOS鸿蒙Next中可不可以提供一下AES128加密和sm3国密加解密的方法 目前项目需求有AES128加密和sm3国密加解密的需求,有没有相关文档或者方法!
AES128加解密参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-aes-sym-encrypt-decrypt-gcm-V5
sm3加密,可以参考以下代码,也可以参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-sm2-asym-encrypt-decrypt-V5
import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError } from '@ohos.base';
import util from '@ohos.util';
import buffer from '@ohos.buffer';
function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}
let base64 = new util.Base64Helper(); // 以Promise方式完成摘要
function doMdByPromise() {
// 摘要算法名称。
let mdAlgName = "SM3";
// 要进行摘要的数据。
let message = "Hello,中国";
let md = cryptoFramework.createMd(mdAlgName);
console.info("[Promise]: Md algName is: " + md.algName);
let promiseMdUpdate = md.update({ data: stringToUint8Array(message) });
return promiseMdUpdate.then(() => {
// 调用 digest() 以返回结果。
let PromiseMdDigest = md.digest();
return PromiseMdDigest;
}).then(digestOutput => {
let mdOutput = digestOutput.data;
let str2 = base64.encodeToStringSync(mdOutput);
let str = uint8ArrayToHexStr(mdOutput)
console.info("[Promise]: MD result: " + mdOutput);
let mdLen = md.getMdLength();
console.info("[Promise]: MD len: " + mdLen);
}).catch((error: BusinessError) => {
console.error("[Promise]: error: " + error.message);
});
}
function uint8ArrayToHexStr(data: Uint8Array): string {
let hexString = "";
let i: number;
for (i = 0; i < data.length; i++) {
let char = ('00' + data[i].toString(16)).slice(-2);
hexString += char;
}
return hexString;
}
import cryptoFramework from '@ohos.security.cryptoFramework';
import { BusinessError, Callback } from '@ohos.base';
import util from '@ohos.util';
import buffer from '@ohos.buffer';
// xxx.ets
@Entry
@Component
struct ListItemExample {
private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
build() {
Column() {
Text("11111111").onClick(() =>{
doMdByPromise().then((str)=>{
console.log(str+"--------")
})
})
}.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
}
}
function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}
let base64 = new util.Base64Helper(); // 以Promise方式完成摘要
function doMdByPromise() {
let s = ""
// 摘要算法名称。
let mdAlgName = "SM3";
// 要进行摘要的数据。
let message = "Hello,中国";
let md = cryptoFramework.createMd(mdAlgName);
console.info("[Promise]: Md algName is: " + md.algName);
let promiseMdUpdate = md.update({ data: stringToUint8Array(message) });
return promiseMdUpdate.then(() => {
// 调用 digest() 以返回结果。
let PromiseMdDigest = md.digest();
return PromiseMdDigest;
}).then(digestOutput => {
let mdOutput = digestOutput.data;
let str2 = base64.encodeToStringSync(mdOutput);
let str = uint8ArrayToHexStr(mdOutput)
console.info("[Promise]: MD result: " + mdOutput);
let mdLen = md.getMdLength();
console.info("[Promise]: MD len: " + mdLen);
return str
}).catch((error: BusinessError) => {
console.error("[Promise]: error: " + error.message);
});
}
function uint8ArrayToHexStr(data: Uint8Array): string {
let hexString = "";
let i: number;
for (i = 0; i < data.length; i++) {
let char = ('00' + data[i].toString(16)).slice(-2);
hexString += char;
}
return hexString;
}
更多关于HarmonyOS鸿蒙Next中可不可以提供一下AES128加密和sm3国密加解密的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,AES128加密和SM3国密加解密可以通过系统提供的加密库来实现。HarmonyOS提供了ohos.security.crypto模块,支持多种加密算法,包括AES和SM3。
对于AES128加密,可以使用cryptoFramework模块中的Aes类。示例代码如下:
import cryptoFramework from '@ohos.security.cryptoFramework';
let aes = cryptoFramework.createAes('AES128|CBC|PKCS7');
let key = new Uint8Array([...]); // 128-bit key
let iv = new Uint8Array([...]); // Initialization vector
aes.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, key, iv)
.then(() => {
return aes.update(new Uint8Array([...])); // Data to encrypt
})
.then((encryptedData) => {
console.log('Encrypted data:', encryptedData);
});
对于SM3国密加解密,可以使用cryptoFramework模块中的Sm3类。示例代码如下:
import cryptoFramework from '@ohos.security.cryptoFramework';
let sm3 = cryptoFramework.createSm3();
let data = new Uint8Array([...]); // Data to hash
sm3.update(data)
.then(() => {
return sm3.doFinal();
})
.then((hash) => {
console.log('SM3 hash:', hash);
});
这些方法可以直接在HarmonyOS鸿蒙Next应用中使用,无需依赖Java或C语言。
在HarmonyOS鸿蒙Next中,可以使用javax.crypto包实现AES128加密,通过Cipher类进行加解密操作。对于SM3国密算法,可以使用org.bouncycastle库中的SM3Digest类进行哈希计算。具体实现需引入相关库并配置密钥和初始化向量(IV)。以下为简单示例:
// AES128 加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] encrypted = cipher.doFinal(data);
// SM3 哈希
SM3Digest digest = new SM3Digest();
digest.update(data, 0, data.length);
byte[] hash = new byte[digest.getDigestSize()];
digest.doFinal(hash, 0);
需确保引入BouncyCastle库以支持SM3算法。

