前言

消息摘要(哈希)算法用于验证数据完整性,常见的有MD5、SHA-1、SHA-256等。@pura/harmony-utilsEncryptUtil 封装了消息摘要方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

在这里插入图片描述

一、消息摘要核心API

EncryptUtil 提供了以下消息摘要方法:

方法 说明 返回类型 使用场景
md5(str) MD5摘要 string 数据校验
sha1(str) SHA-1摘要 string 数据校验
sha256(str) SHA-256摘要 string 安全校验
sha512(str) SHA-512摘要 string 高安全场景

1.1 核心特性

  • 简洁易用:封装复杂逻辑为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 多种算法:支持MD5、SHA-1、SHA-256、SHA-512

1.2 哈希算法对比

算法 输出长度 安全性 速度 适用场景
MD5 128位 非安全校验
SHA-1 160位 逐步弃用
SHA-256 256位 推荐使用
SHA-512 512位 很高 高安全场景

二、完整使用步骤

2.1 安装依赖

ohpm install @pura/harmony-utils

2.2 MD5摘要

import { EncryptUtil } from '@pura/harmony-utils';

Button('MD5摘要')
  .width('100%')
  .onClick(async () => {
    try {
      let hash = await EncryptUtil.md5('Hello harmony-utils');
      this.result = `MD5: ${hash}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 SHA-256摘要

Button('SHA-256摘要')
  .width('100%')
  .onClick(async () => {
    try {
      let hash = await EncryptUtil.sha256('Hello harmony-utils');
      this.result = `SHA-256: ${hash}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

在这里插入图片描述

三、完整页面示例

import { EncryptUtil } from '@pura/harmony-utils';

@Entry
@Component
struct HashDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('MD5').width('100%').onClick(async () => {
        let hash = await EncryptUtil.md5('Hello');
        this.result = `MD5: ${hash}`;
      });
      Button('SHA-256').width('100%').onClick(async () => {
        let hash = await EncryptUtil.sha256('Hello');
        this.result = `SHA-256: ${hash}`;
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 文件完整性校验

import { EncryptUtil, FileUtil } from '@pura/harmony-utils';

async function verifyFileIntegrity(path: string, expectedHash: string): Promise<boolean> {
  let content = FileUtil.readText(path);
  let actualHash = await EncryptUtil.sha256(content);
  return actualHash === expectedHash;
}

4.2 密码哈希存储

async function hashPassword(password: string): Promise<string> {
  return await EncryptUtil.sha256(password + 'salt');
}

五、注意事项

  1. 异步方法:摘要方法通常是异步的,需使用await
  2. 不可逆:哈希是单向的,无法从摘要还原原文
  3. MD5不安全:MD5已被证明不安全,不推荐用于安全场景
  4. 初始化依赖:使用前需确保 AppUtil.init() 已调用
  5. 加盐:密码存储建议加盐后再哈希

六、常见问题

Q1: MD5可以解密吗?

不可以,哈希是单向函数,无法从摘要还原原文。

Q2: 相同输入的哈希结果相同吗?

相同输入始终产生相同的哈希结果,这是哈希的基本特性。

Q3: SHA-256比MD5安全多少?

SHA-256输出256位,远比MD5的128位安全,目前没有已知的碰撞攻击。

Q4: 哈希可以用于加密吗?

不可以,哈希是单向的,加密需要可逆。加密请使用AES或RSA。

在这里插入图片描述
在这里插入图片描述

总结

EncryptUtil 的消息摘要方法为数据完整性校验提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以根据安全需求选择合适的哈希算法。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐