首页 > 其他分享 >HarmonyOS Next 密钥转换技巧:提升加解密灵活性

HarmonyOS Next 密钥转换技巧:提升加解密灵活性

时间:2024-11-18 08:49:18浏览次数:1  
标签:转换 加解密 Next HarmonyOS let 密钥 key error console

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。

一、引言

在当今数字化安全领域,密钥转换扮演着举足轻重的角色。随着信息技术的飞速发展,不同系统、应用和设备之间的数据交互日益频繁,而这些交互往往依赖于加密技术来保障数据的机密性、完整性和可用性。然而,由于各种因素的影响,如系统升级、跨平台协作或与遗留系统的兼容性需求,密钥的格式、类型和表示方式可能存在差异。例如,在企业进行数字化转型过程中,可能需要将旧有系统中使用的特定格式密钥转换为新系统支持的格式,以确保数据加密的连续性;或者在移动应用与后端服务器进行安全通信时,可能需要根据服务器端的要求对密钥进行转换。因此,掌握密钥转换技术对于实现安全、高效的数据交互至关重要。接下来,我们将深入探讨 HarmonyOS Next 中的密钥转换技巧,以及它们如何提升加解密操作的灵活性。

二、对称密钥二进制数据转换

(一)3DES 转换过程与代码示例(ArkTS)

  1. 转换过程
       - 首先,获取 3DES 二进制密钥数据并封装成 DataBlob 对象。假设我们有一个长度为 192 位(24 字节)的 3DES 密钥数据,如下所示:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { BusinessError } from '@kit.BasicServicesKit';
function genKeyMaterialBlob(): cryptoFramework.DataBlob {
  let arr = [
    0xba, 0x3d, 0xc2, 0.71, 0x21, 0x1e, 0x30, 0x56,
    0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0.7c,
    0xba, 0x3b, 0xc2, 0.71, 0xab, 0xa0, 0.30, 0.72];
  let keyMaterial = new Uint8Array(arr);
  return { data: keyMaterial };
}

- 这里创建了一个包含 3DES 二进制密钥数据的 Uint8Array,并将其封装成 DataBlob 对象,以便后续使用。
2. 然后,创建 3DES 对称密钥生成器并进行转换:

function testConvertSymKey() {
  // 创建SymKeyGenerator实例
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192');
  // 根据指定的数据生成对称密钥
  let keyMaterialBlob = genKeyMaterialBlob();
  try {
    symKeyGenerator.convertKey(keyMaterialBlob, (error, key) => {
      if (error) {
        let e: BusinessError = error as BusinessError;
        console.error(`convertKey error, ${e.code}, ${e.message}`);
        return;
      }
      console.info('key algName:' + key.algName);
      console.info('key format:' + key.format);
      let encodedKey = key.getEncoded();
      console.info('key getEncoded hex: ' + encodedKey.data);
    })
  } catch (error) {
    let e: BusinessError = error as BusinessError;
    console.error(`convertKey failed, ${e.code}, ${e.message}`);
  }
}

- 创建一个密钥算法为 3DES、密钥长度为 192 位的对称密钥生成器。接着调用 convertKey 方法,传入封装好的二进制密钥数据,尝试将其转换为对称密钥。如果转换成功,在回调函数中输出密钥的算法名称、格式以及二进制数据(以十六进制字符串形式);如果转换失败,则捕获异常并输出错误信息。

(二)HMAC 转换过程与代码示例(ArkTS)

  1. 转换过程
       - 先获取 HMAC 二进制密钥数据并封装成 DataBlob 对象。例如,假设我们有一个简单的 HMAC 密钥数据:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { BusinessError } from '@kit.BasicServicesKit';
function genHMACKeyMaterialBlob(): cryptoFramework.DataBlob {
  let arr = [0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0];
  let keyMaterial = new Uint8Array(arr);
  return { data: keyMaterial };
}

- 创建了一个包含 HMAC 二进制密钥数据的 Uint8Array,并封装成 DataBlob 对象。
2. 接着创建 HMAC 对称密钥生成器并进行转换:

function testConvertHMACKey() {
  // 创建SymKeyGenerator实例
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('HMAC');
  // 根据指定的数据生成对称密钥
  let keyMaterialBlob = genHMACKeyMaterialBlob();
  try {
    symKeyGenerator.convertKey(keyMaterialBlob, (error, key) => {
      if (error) {
        let e: BusinessError = error as BusinessError;
        console.error(`convertKey error, ${e.code}, ${e.message}`);
        return;
      }
      console.info('key algName:' + key.algName);
      console.info('key format:' + key.format);
      let encodedKey = key.getEncoded();
      console.info('key getEncoded hex: ' + encodedKey.data);
    })
  } catch (error) {
    let e: BusinessError = error as BusinessError;
    console.error(`convertKey failed, ${e.code}, ${e.message}`);
  }
}

- 创建一个密钥算法为 HMAC 的对称密钥生成器,然后调用 convertKey 方法传入二进制密钥数据进行转换。若成功,输出密钥相关信息;若失败,输出错误信息。

三、总结

在 HarmonyOS Next 中,密钥转换为加解密操作带来了显著的灵活性提升。对于对称密钥,通过如 3DES 和 HMAC 二进制数据转换的示例可知,我们可以将外部获取或存储的二进制密钥数据转换为系统可直接使用的对称密钥格式。其方法主要包括获取正确格式的二进制数据,创建相应算法的对称密钥生成器,然后使用 convertKey 方法进行转换,并根据回调函数或异常处理来判断转换结果。密钥转换的意义深远,它打破了不同密钥格式和来源之间的隔阂,使得在复杂的信息系统环境中,无论是系统内部的密钥管理,还是与外部系统的安全交互,都能够更加顺畅地进行。这有助于提高系统的兼容性、可扩展性和安全性,确保数据在各种情况下都能得到有效的加密保护,从而为用户提供更加可靠的安全保障。

标签:转换,加解密,Next,HarmonyOS,let,密钥,key,error,console
From: https://www.cnblogs.com/samex/p/18551610

相关文章

  • HarmonyOS Next 非对称密钥生成实战:多算法与多方式详解
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在当今数字化时代,安全通信已......
  • #HarmonyOS篇:状态管理
    状态管理概要状态变量:被状态装饰器装饰的变量,状态变量值的改变会引起UI的渲染更新。常规变量:没有被状态装饰器装饰的变量,通常应用于辅助计算。数据源/同步源:状态变量的原始来源,可以同步给不同的状态数据。命名参数机制:父组件通过指定参数传递给子组件的状态变量,为父子传......
  • #HarmonyOS篇: 主题图标库&资源分类与访问
    主题图标库https://developer.huawei.com/consumer/cn/design/harmonyos-symbol/资源分类与访问地址https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/resource-categories-and-access-V5base目录是默认存在的目录,二级子目录element用于存放字符串......
  • 鸿蒙Next模糊接口梳理
    foregroundBlurStyle和backgroundBlurStyleforegroundBlurStyle(value:BlurStyle,options?:ForegroundBlurStyleOptions)backgroundBlurStyle(value:BlurStyle,options?:BackgroundBlurStyleOptions)第一个参数都是模糊材质,用的是鸿蒙系统定制好的一套模糊参数,封装了模糊......
  • HarmonyOS:UIAbility组件间交互(设备内)
    UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,包括应用内的其他UIAbility、或者其他应用的UIAbility(例如启动三方支付UIAbility)。一、启动应用内的UIAbility当一个应用内包含多个UIAbility时,存在应用内启动UIAbility的场景......
  • 使用 Docker 部署 Next Terminal 轻量级堡垒机
    1)NextTerminal 介绍官网:https://next-terminal.typesafe.cn/GitHub:https://github.com/dushixiang/next-terminal想必经常玩服务器的都了解过 堡垒机,类似于跳板机,但与跳板机的侧重点不同。堡垒机的主要功能是控制和监控对内部网络的远程访问。它提供严格的访问控制、会话审......
  • HarmonyOS Next 网络加速进阶:优化策略与应用实践
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在上一篇博客中,我们已经初步......
  • HarmonyOS Next 网络加速入门:基础功能全解析
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在当今数字化时代,网络已经成......
  • HarmonyOS Next 网络加速实战:社交应用网络优化全攻略
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在当今数字化时代,社交应用已......
  • HarmonyOS Next 网络加速实战:打造极致网络体验
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在移动应用的世界里,网络体验......