鸿蒙三方库 | harmony-utils之EncryptUtil消息摘要MD5与SHA详解
·
前言
消息摘要(哈希)算法用于验证数据完整性,常见的有MD5、SHA-1、SHA-256等。@pura/harmony-utils 的 EncryptUtil 封装了消息摘要方法。本文将从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');
}
五、注意事项
- 异步方法:摘要方法通常是异步的,需使用await
- 不可逆:哈希是单向的,无法从摘要还原原文
- MD5不安全:MD5已被证明不安全,不推荐用于安全场景
- 初始化依赖:使用前需确保
AppUtil.init()已调用 - 加盐:密码存储建议加盐后再哈希
六、常见问题
Q1: MD5可以解密吗?
不可以,哈希是单向函数,无法从摘要还原原文。
Q2: 相同输入的哈希结果相同吗?
相同输入始终产生相同的哈希结果,这是哈希的基本特性。
Q3: SHA-256比MD5安全多少?
SHA-256输出256位,远比MD5的128位安全,目前没有已知的碰撞攻击。
Q4: 哈希可以用于加密吗?
不可以,哈希是单向的,加密需要可逆。加密请使用AES或RSA。


总结
EncryptUtil 的消息摘要方法为数据完整性校验提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以根据安全需求选择合适的哈希算法。
本文基于
@pura/harmony-utils工具库,更多功能请参考官方文档与后续系列文章。
更多推荐



所有评论(0)