OpenHarmony 常用加密算法
在OpenHarmony 中,可以使用系统提供的api 进行加密算法。下文将列举几个常见的加密算法实现,供开发者参考使用。 导包 下面两种导包方式均可以 import { cryptoFramework } from '@kit.CryptoArchitectureKit'; 或者 import cryptoFramework from '@ohos.security
·
在OpenHarmony 中,可以使用系统提供的api 进行加密算法。下文将列举几个常见的加密算法实现,供开发者参考使用。
导包
下面两种导包方式均可以
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
或者
import cryptoFramework from '@ohos.security.cryptoFramework';
安全随机数
使用 createRandom 生成Random实例,生成随机数
let len = 32;
let random = cryptoFramework.createRandom();
let dataBlob = await random.generateRandom(len);
let uint8Array = dataBlob.data;
AES128加解密
使用createSymKeyGenerator和createCipher进行AES128 加解密,AES256加密算法类似。
let asyKeyGenerator = cryptoFramework.createSymKeyGenerator("AES128");
let symKey = await asyKeyGenerator.convertKey({
data: key
})
let gcmmParams: cryptoFramework.GcmParamsSpec = {
algName: "GcmParamsSpec",
iv: {
data: iv // iv 偏移
},
aad: {
data: aad // aad
},
authTag: {
data: authTag // tag
}
}
let cipher = cryptoFramework.createCipher("AES128|GCM|NoPadding");
await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmmParams);
// 加密数据
let dataBlob = await cipher.doFinal({ data: data})
let uint8Array = dataBlob.data;
HMAC消息认证码算法
HMAC消息认证码算法支持SHA1,SHA224,SHA256,SHA384,SHA512。
let mac = cryptoFramework.createMac("SHA256");
let asyKeyGenerator = cryptoFramework.createSymKeyGenerator("AES128");
// 加密Key
let symKey = await asyKeyGenerator.convertKey({ data: key})
// 加密数据
await mac.init(symKey);await mac.update({ data: data});
let dataBlob = await mac.doFinal();
let uint8Array = dataBlob.data;
HKDF
HKDF是一种基于HMAC的密钥导出函数,分为提取和扩展两步,用于从短密钥材料生成更长的密钥。HKDF在OpenHarmony 使用非常简单,参考下面的方法。
let kdf = cryptoFramework.createKdf("HKDF|SHA256");
let params: cryptoFramework.HKDFSpec = {
key: key, // 加密key
salt: salt, // 盐
info: info, // 扩展info
keySize: keySize, // 扩展长度
algName: "HKDF"
}
let dataBlob = await kdf.generateSecret(params);
let uint8Array = dataBlob.data;
大素数取模
let base: bigint = BigInt('0x' + 大数);
let exp: bigint = BigInt('0x2');
let mod: bigint = BigInt('0x' + 大素数);
let result = BigInt(1);
base = base % mod;
while (exp > BigInt(0)) {
if ((exp & BigInt(1)) === BigInt(1)) {
result = (result * base) % mod;
}
exp >>= BigInt(1); // 右移一位相当于除以2
base = (base * base) % mod;
}
return result;
更多推荐
已为社区贡献13条内容
所有评论(0)