前言
在iOS开发中Keychain 是一个非常安全的存储系统,用于保存敏感信息,如密码、证书、密钥等。与 NSUserDefaults 或文件系统不同,Keychain 提供了更高的安全性,因为它对数据进行了加密,并且只有经过授权的应用程序才能访问存储的数据。那么在鸿蒙里面对应的是什么呢?
1、关键资产(@ohos.security.asset)
在鸿蒙里面也有类似的东西,叫做关键资产(@ohos.security.asset),关键资产存储服务提供了用户短敏感数据的安全存储及管理能力。其中,短敏感数据可以是密码类(账号/密码)、Token类(应用凭据)、其他关键明文(如银行卡号)等长度较短的用户敏感数据。
从API version 11 开始支持
使用关键资产需要导入模块AssetStoreKit
import {
asset } from '@kit.AssetStoreKit';
2、asset常用操作
version 11 开始支持,异步方法,如下
-
asset.add:add(attributes: AssetMap): Promise,新增一条关键资产,使用Promise方式异步返回结果。
-
asset.remove:removeSync(query: AssetMap): void,删除符合条件的一条或多条关键资产,使用异步方式。
-
asset.update:update(query: AssetMap, attributesToUpdate: AssetMap): Promise,更新符合条件的一条关键资产,使用Promise方式异步返回结果。
-
asset.query:query(query: AssetMap): Promise<Array>,查询一条或多条符合条件的关键资产。若查询需要用户认证的关键资产,则需要在本函数前调用asset.preQuery,在本函数后调用asset.postQuery,使用Promise回调异步返回结果。
-
asset.preQuery:preQuery(query: AssetMap): Promise,查询的预处理,用于需要用户认证的关键资产。在用户认证成功后,应当随后调用asset.query、asset.postQuery。使用Promise方式异步返回结果。
-
asset.postQuery:postQuery(handle: AssetMap): Promise,查询的后置处理,用于需要用户认证的关键资产。需与asset.preQuery函数成对出现。使用Promise方式异步返回结果。
version 12 开始支持,同步方法,如下
-
asset.addSync:新增一条关键资产,使用Promise方式同步步返回结果。
-
asset.removeSync:removeSync(query: AssetMap): void,删除符合条件的一条或多条关键资产,使用同步方式。
-
asset.addSync:新增一条关键资产,使用Promise方式同步步返回结果。
-
asset.removeSync:removeSync(query: AssetMap): void,删除符合条件的一条或多条关键资产,使用同步方式。
-
asset.updateSync:updateSync(query: AssetMap, attributesToUpdate: AssetMap): void,更新符合条件的一条关键资产,使用同步方式返回结果。
-
asset.querySync:querySync(query: AssetMap): Array,查询一条或多条符合条件的关键资产。若查询需要用户认证的关键资产,则需要在本函数前调用asset.preQuerySync,在本函数后调用asset.postQuerySync,使用同步方式返回结果。
-
asset.preQuerySync:preQuerySync(query: AssetMap): Uint8Array,查询的预处理,用于需要用户认证的关键资产。在用户认证成功后,应当随后调用asset.querySync、asset.postQuerySync。使用同步方式返回结果。
-
asset.postQuerySync:postQuerySync(handle: AssetMap): void,查询的后置处理,用于需要用户认证的关键资产。需与asset.preQuerySync函数成对出现。使用同步方式返回结果。
关键资产需要使用到的系统能力: SystemCapability.Security.Asset
3、asset的封装使用
在iOS中使用Keychain 比较常见的功能是存储一个值作为设备唯一标识,那么asset也以此作为示例封装一个,刚好前阵子项目里面也使用了。我也封装了一个工具类hmDeviceTools。
3.1 导入需要的头文件
import {
util } from '@kit.ArkTS'
import {
asset } from '@kit.AssetStoreKit';
import {
BusinessError } from '@kit.BasicServicesKit';
3.2 封装工具类
hmDeviceTools类内容
export class hmDeviceTools {
private static deviceIdCacheKey = "testdevice_id_cache_key" //testkey
private static deviceId = ""
/**
* * 判断字符串是否为空
* @param property 被检测的字符串
* @return Boolean
*/
static isEmpty(property?: string | null): Boolean {
if (property == '' || property == null || property == undefined || property == 'undefined' ||
property.length == 0) {
return true
}
return false
}
/**
* 获取设备id
*/
static getDeviceId() {
let deviceId = hmDeviceTools.deviceId
//如果内存缓存为空,则从AssetStore中读取
if (hmDeviceTools.isEmpty(deviceId)) {
deviceId = getAssetMap(hmDeviceTools.deviceIdCacheKey)
}
//如果AssetStore中未读取到,则随机生成32位随机码,然后缓存到AssetStore中
if (hmDeviceTools.isEmpty(deviceId)) {
鸿蒙关键资产实现设备唯一标识

最低0.47元/天 解锁文章
1187

被折叠的 条评论
为什么被折叠?



