HarmonyOS Next 非对称密钥生成实战:多算法与多方式详解

news/2024/11/18 8:49:41/文章来源:https://www.cnblogs.com/samex/p/18551608

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

一、引言

在当今数字化时代,安全通信已然成为信息交互的基石。非对称密钥技术作为保障信息安全的关键手段,在安全通信领域中发挥着不可或缺的作用。与对称密钥不同,非对称密钥使用公钥和私钥这一对独特的“钥匙”,公钥可以公开,任何人都能使用它来加密信息,而私钥则被严格保密,只有拥有者才能使用它来解密信息。这种特性使得非对称密钥在身份认证、数据加密和数字签名等方面具有独特的优势,能够有效防止信息被窃取、篡改和伪造,为我们的数字生活提供了坚实的安全保障。接下来,我们将深入探讨 HarmonyOS Next 中如何生成非对称密钥对,以及不同算法和生成方式的特点与应用。

二、非对称密钥生成和转换规格

(二)指定规格方式差异与应用场景

  1. 字符串参数方式
       - 这种方式简单直观,通过特定的字符串格式来描述所需生成的密钥规格。例如,对于 RSA 算法,使用“RSA 密钥类型|素数个数”的格式,如“RSA1024|PRIMES_2”表示生成 RSA1024 类型、素数个数为 2 的密钥。对于其他算法,如 ECC 的“ECC 密钥长度”格式(如“ECC256”)、SM2 的“SM2_密钥长度”格式(如“SM2_256”)等。这种方式适用于快速创建常见规格的密钥,在开发过程中,如果开发者对密钥规格有明确的需求且符合预定义的字符串格式,使用字符串参数可以方便快捷地生成密钥。例如,在一个简单的加密通信示例中,开发者可以直接使用“RSA2048|PRIMES_2”来生成一个用于加密会话密钥的 RSA 密钥对。
  2. 密钥参数方式
       - 密钥参数方式则更加灵活和精确,它允许开发者通过详细的密钥参数来构建密钥。以 RSA 为例,需要指定模数(n)、公钥指数(pk)等参数;对于 ECC 算法,需要指定椭圆曲线的参数(如 p、a、b、g、n、h 等)以及公钥和私钥的值。这种方式适用于需要自定义密钥参数的高级场景,如在某些特定的安全协议实现中,根据协议要求精确构建符合标准的密钥。例如,在一个与特定安全标准兼容的应用中,开发者可能需要根据标准文档中定义的密钥参数,使用密钥参数指定方式来生成符合要求的 ECC 密钥对。

三、指定 PEM 格式字符串数据转换非对称密钥对(ArkTS 示例)

(一)转换要求

  1. 公钥需满足 X.509 规范、PKCS#1 规范、PEM 编码格式。这意味着公钥的格式必须符合 X.509 标准中定义的结构,并且使用 PKCS#1 标准进行编码,同时以 PEM 格式进行封装,以便于在不同系统之间进行传输和存储。
  2. 私钥需满足 PKCS#8 规范、PKCS#1 规范、PEM 编码格式。私钥同样需要遵循特定的规范和格式要求,以确保其安全性和兼容性。PKCS#8 规范定义了私钥的存储和加密格式,与 PKCS#1 规范相结合,保证了私钥在不同应用中的正确使用。

(二)代码实现细节

  1. 首先,准备好符合要求的 PEM 格式字符串数据,包括公钥和私钥字符串。例如:
let priKeyPkcs1Str1024: string = "-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\nY68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\nYOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\nAoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\nLjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\nD3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\ne3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\na1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\nMzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\nDyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\nqc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\nakNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n-----END RSA PRIVATE KEY-----\n";
let publicPkcs1Str1024: string = "-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\nh7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\nSHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n-----END RSA PUBLIC KEY-----\n";
  1. 然后,创建非对称密钥生成器并进行转换:
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
async function TestPkcs1ToPkcs8ByPromise() {
  let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024');
  let keyPair = await asyKeyGenerator.convertPemKey(publicPkcs1Str1024, priKeyPkcs1Str1024);
  let priPemKey = keyPair.priKey;
  let pubPemKey = keyPair.pubKey;
  let priString = priPemKey.getEncodedPem('PKCS8');
  let pubString = pubPemKey.getEncodedPem('X509');
  console.info("[promise]TestPkcs1ToPkcs8ByPromise priString output is " + priString);
  console.info("[promise]TestPkcs1ToPkcs8ByPromise pubString output is " + pubString);
}

- 这里首先创建了一个 RSA 密钥生成器,指定密钥类型为“RSA1024”。然后使用convertPemKey方法,传入公钥和私钥字符串数据,将其转换为非对称密钥对。转换成功后,可以获取转换后的密钥对中的公钥和私钥,并使用getEncodedPem方法将其转换为指定格式(如 PKCS8 格式的私钥和 X509 格式的公钥)的字符串,以便进行后续的操作或存储。

四、总结

在 HarmonyOS Next 中,非对称密钥生成涉及多种算法和生成方式。不同算法如 RSA、ECC、DSA、SM2、Ed25519、X25519 和 DH 各具特点,适用于不同场景。指定规格方式有字符串参数和密钥参数两种,我们开发者需根据实际需求选择。在转换非对称密钥对时,要遵循相应的转换要求和流程,如 PEM 格式字符串数据转换时需确保公钥和私钥满足特定规范。要点包括了解各种算法的特性、掌握不同指定规格方式的适用场景等。注意事项有注意算法的安全性和性能,如某些算法在特定场景下可能存在安全风险或性能瓶颈;同时,要确保密钥的妥善管理,防止密钥泄露导致安全问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835998.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11.21

在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法 ,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算机启动失败。 实验要求:提…

C# 入门深度学习:万字长文讲解微积分和梯度下降

教程名称:使用 C# 入门深度学习 作者:痴者工良 地址: https://torch.whuanle.cn 目录微积分极限导数求导公式乘除求导例题复合函数求导的链式法则Sigmoid 函数的导数求最小值问题微分积分偏导数多元函数定义域多元函数的值多元函数的极限偏导数全微分偏导数求最小值拉格朗日…

11.19

实验10:组合模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解组合模式的动机,掌握该模式的结构; 2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式 用透明组合模式实现教材中的“文件夹浏览”这个例子。 实验要求:文件的执行不需真正实现…

数据分析:完整的成体系的生存分析的结果汇总

本章节全面汇总了生存分析的相关各类分析方法,形成了一个系统化的生存分析教程。通过这个教程,读者可以深入了解生存分析所涵盖的多种分析技术。详细情况请前往 数据分析:完整的成体系的生存分析的结果汇总 科研绘图系列:组合多个文章图 介绍 本章节全面汇总了生存分析的相…

20222417 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.本周内容回顾Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。旨在帮助安全专家和IT专家识别安全问题、验证…

Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述

Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述 Red Hat Enterprise Linux 9.5 (x86_64, aarch64) - 红帽企业 Linux RHEL 9 | 红帽企业 Linux 9 请访问原文链接:https://sysin.org/blog/rhel-9/ 查看最新…

2024.11.14(周四)

某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。 实验要求:…

2024.11.15(周五)

某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。 实验要求: 1. 提交类图; 2. 提交源代码; 3. 注意编程规范。1、类图2、源代码 #include<iostre…

C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

2024.11.13(周三)

婚介所其实就是找对象的一个代理,请仿照我们的课堂例子“论坛权限控制代理”完成这个实际问题,其中如果年纪小于18周岁,婚介所会提示“对不起,不能早恋!”,并终止业务。 实验要求: 1. 提交类图; 2. 提交源代码; 3. 注意编程规范。1、类图2、源代码 #include <iostr…

读数据质量管理:数据可靠性与数据质量问题解决之道07异常检测

异常检测1. 监控和异常检测 1.1. 在数据方面,所有明面上的测试和数据质量检查都不能完全保护你免受数据宕机的影响1.1.1. 宕机可能由于各种原因而出现在管道内部和外部的各个阶段1.1.2. 这些原因通常与数据本身无关1.2. 要了解数据何时中断,最好的做法是依靠数据监控,特别是…

2024.11.18 鲜花

浅谈多线程浅谈多线程打上花火 あの日(ひ)见渡(みわた)した渚(なぎさ)を 那天所眺望的海岸 a no hi mi wa ta shi ta na gi sa wo 今(いま)も思(おも)い出(だ)すんだ 直至今日仍能想起 i ma mo o mo i da su n da 砂(すな)の上(うえ)に刻(きざ)んだ言叶(ことば) 在沙滩上刻下的…