Appearance
数据加密
鸿蒙数据加密方案:CryptoArchitectureKit、KeyStore、加密存储。
1. 加密方案对比
| 方案 | 用途 | 适用场景 |
|---|---|---|
| CryptoArchitectureKit | 通用加密算法 | AES、RSA、SHA 等 |
| KeyStore | 密钥管理 | 安全存储密钥 |
| AssetStore | 安全存储 | 应用卸载后保留 |
| Preferences 加密 | 配置加密 | Token 等小数据 |
2. CryptoArchitectureKit
2.1 AES 对称加密
typescript
import { crypto } from '@kit.CryptoArchitectureKit'
// 生成 AES 密钥
let aesKey = crypto.generateKey({
algorithm: crypto.Algorithm.AES_256_GCM,
keySize: 256,
exportable: false // 密钥不可导出
})
// 加密
let encrypted = crypto.encrypt({
key: aesKey,
data: new TextEncoder().encode('sensitive data'),
algorithm: crypto.Algorithm.AES_256_GCM
})
// 解密
let decrypted = crypto.decrypt({
key: aesKey,
data: encrypted,
algorithm: crypto.Algorithm.AES_256_GCM
})
let result = new TextDecoder().decode(decrypted)
console.log('解密结果:', result)2.2 RSA 非对称加密
typescript
// 生成 RSA 密钥对
let keyPair = crypto.generateKeyPair({
algorithm: crypto.Algorithm.RSA_2048
})
// 公钥加密
let encrypted = crypto.encrypt({
key: keyPair.publicKey,
data: new TextEncoder().encode('secret message'),
algorithm: crypto.Algorithm.RSA_PKCS1_OAEP
})
// 私钥解密
let decrypted = crypto.decrypt({
key: keyPair.privateKey,
data: encrypted,
algorithm: crypto.Algorithm.RSA_PKCS1_OAEP
})2.3 SHA 哈希
typescript
// SHA-256 哈希
let hash = crypto.hash({
data: new TextEncoder().encode('password'),
algorithm: crypto.Algorithm.SHA_256
})
// 结果是一个 Uint8Array,通常转十六进制
function toHexString(bytes: Uint8Array): string {
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('')
}
let hashStr = toHexString(hash)
console.log('哈希值:', hashStr)
// 例:5e884898da28047151d0e568...3. KeyStore 密钥管理
3.1 创建密钥
typescript
import { keyStorage } from '@kit.ArkTS'
// 创建密钥库
let keyStore = await keyStorage.getKeyStore()
// 生成密钥
let keyAlias = await keyStore.generateKey({
alias: 'app_key',
algorithm: keyStorage.KeyAlgorithm.AES_256,
keySize: 256,
keyGenSpec: {
blockMode: keyStorage.KeyGenParameter.BlockMode.GCM,
padding: keyStorage.KeyGenParameter.Padding.NONE
}
})3.2 使用密钥
typescript
// 获取密钥
let key = await keyStore.getKey('app_key')
// 用密钥加密数据
let encrypted = crypto.encrypt({
key: key,
data: sensitiveData,
algorithm: crypto.Algorithm.AES_256_GCM
})
// 存储加密后的数据
let preferences = await preferences.getPreferences(context, { name: 'secure' })
await preferences.put('encryptedData', encrypted)
await preferences.commit()4. 密码存储最佳实践
❌ 错误做法:
├─ 明文存储密码
├─ 使用 MD5(已不安全)
├─ 硬编码密码在代码中
└─ 使用自定义加密算法
✅ 正确做法:
├─ 密码哈希存储(SHA-256 + salt)
├─ 使用 KeyStore 管理密钥
├─ 敏感数据用 AES 加密
└─ 密钥不硬编码5. 面试高频考点
Q1: 鸿蒙数据加密方案有哪些?
回答:CryptoArchitectureKit(AES/RSA/SHA 算法)、KeyStore(密钥管理)、AssetStore(安全存储)。敏感数据 AES 加密后存储,密码 SHA-256 哈希。
Q2: KeyStore 的作用?
回答:安全存储和管理加密密钥,密钥不导出、不硬编码在代码中。
🐱 小猫提示:数据加密记住 "AES 加密存储、SHA-256 哈希、KeyStore 管理密钥、密码不硬编码"。