HarmonyOS 是否有关于生成双因子认证totp的示例代码?

如题:HarmonyOS 是否有关于生成双因子认证totp的示例代码?

阅读 474
1 个回答

随机生成对称加密密钥:

import { cryptoFramework } from '@kit.CryptoArchitectureKit';

function testSyncGenerateAesKey() {
  // 创建SymKeyGenerator实例
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
  // 使用密钥生成器随机生成对称密钥
  let promiseSymKey = symKeyGenerator.generateSymKeySync();
  // 获取对称密钥的二进制数据,输出256位密钥。长度为32字节
  let encodedKey = promiseSymKey.getEncoded();
  console.info('key hex:' + encodedKey.data);
}

hmac消息认证码计算:

import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer } from '@kit.ArkTS';

function genSymKeyByData(symKeyData: Uint8Array) {
  let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData };
  let aesGenerator = cryptoFramework.createSymKeyGenerator('HMAC');
  let symKey = aesGenerator.convertKeySync(symKeyBlob);
  console.info('[Sync]convertKey success');
  return symKey;
}

function doHmacBySync() {
  // 把字符串按utf-8解码为Uint8Array,使用固定的128位的密钥,即16字节
  let keyData = new Uint8Array(buffer.from("xxx", 'utf-8').buffer);
  let key = genSymKeyByData(keyData);
  let macAlgName = 'SHA256'; // 摘要算法名
  let message = 'hmacTestMessgae'; // 待进行HMAC的数据
  let mac = cryptoFramework.createMac(macAlgName);
  mac.initSync(key);
  // 数据量较少时,可以只做一次update,将数据全部传入,接口未对入参长度做限制
  mac.updateSync({ data: new Uint8Array(buffer.from(message, 'utf-8').buffer) });
  let macResult = mac.doFinalSync();
  console.info('[Sync]HMAC result:' + macResult.data);
  let macLen = mac.getMacLength();
  console.info('HMAC len:' + macLen);
}

参考指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-compute-mac-V5\#hmac%E4%B8%80%E6%AC%A1%E6%80%A7%E4%BC%A0%E5%85%A5

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进