鸿蒙 自定义生成高强度密码建议
本文介绍了密码保险箱的强密码生成机制。系统默认生成16位包含大小写字母和数字的密码,如"Abc123Def456Ghi7"。开发者可通过passwordRules属性自定义规则,包括:首位字符类型(大写/小写/数字)、是否包含特殊字符(!@#$%^&*)、密码长度(12-32位)。规则支持固定长度或范围设置,如"begin:[upper],special:[y
本文同步发表于微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
一、强密码
在密码保险箱强密码填充场景中,强密码是系统推荐用户使用的高强度密码。
强密码的构成
| 组成 | 说明 |
|---|---|
| 大写字母 | A-Z |
| 小写字母 | a-z |
| 数字 | 0-9 |
| 特殊字符(可选) | !@#$%^&* |
特征:强密码中一定包含大写字母、小写字母、数字三种字符,复杂度高,破解难度大。
二、默认强密码规则
当开发中没有指定密码规则,或是指定的密码规则书写错误、不符合规范时,密码保险箱会根据默认规则生成强密码。
默认规则
| 规则项 | 默认值 | 说明 |
|---|---|---|
| 首位字符 | 字母开头 | 以任意字母开头 |
| 字符类型 | 包含大写字母、小写字母、数字 | 不包含特殊字符 |
| 密码长度 | 16位 | 固定长度16位 |
默认规则生成示例:
-
Abc123Def456Ghi7(16位,包含大小写字母和数字)
三、自定义强密码规则
可以通过设置新密码输入框的passwordRules属性来指定强密码规则。
强密码一定包含大写字母、小写字母、数字三种字符,可以在以下范围内自定义规格。
核心属性
| 属性 | 说明 | 是否必填 |
|---|---|---|
| begin | 指定密码首位的字符类型 | 可选 |
| special | 指定是否包含特殊字符 | 可选 |
| len | 指定密码长度 | 可选 |
书写规则:
-
3个属性可以任意选择
-
书写时顺序不做限制
-
属性之间以英文逗号"," 进行分隔
-
每个属性只能出现一次
begin属性
表示生成的强密码首位的字符类型。
| 取值 | 说明 |
|---|---|
upper |
以大写字母开头 |
lower |
以小写字母开头 |
digit |
以数字开头 |
| 不填 | 以任意字母或数字0-9开头 |
格式举例:
begin:[upper]
注意事项:如果填写了非上表中的指定值,则按默认规则处理。
special属性
表示生成的强密码是否可以包含特殊字符。
| 取值 | 说明 |
|---|---|
yes |
包含至少一个特殊字符(特殊字符不会出现在首位) |
| 不填 | 不包含特殊字符 |
格式举例:
special:[yes]
可用的特殊字符:
! @ # $ % ^ & *
特殊字符出现位置:不会出现在强密码的首位。
len属性
表示生成的强密码长度。
允许范围:
| 限制 | 说明 |
|---|---|
| 最小长度 | 12位 |
| 最大长度 | 32位 |
长度属性提供三个关键字:
| 关键字 | 说明 |
|---|---|
fixedlen |
固定长度 |
minlen |
最小长度 |
maxlen |
最大长度 |
len属性的四种配置方式
方式一:仅设置固定长度fixedlen
len:[fixedlen:16]
强密码长度为fixedlen设置值(16位)。
方式二:仅设置最小长度minlen
len:[minlen:15]
强密码长度随机,最小长度为minlen设置值,最大为默认值32位(15-32位)。
方式三:仅设置最大长度maxlen
len:[maxlen:28]
强密码长度随机,最小长度为默认值12位,最大为maxlen设置值(12-28位)。
方式四:同时设置最大长度maxlen和最小长度minlen
len:[minlen:13,maxlen:18]
强密码长度随机,最小长度为minlen设置值,最大为maxlen设置值。minlen的值必须小于maxlen的值(13-18位)。
不设置len属性
默认强密码长度为16位。
四、自定义规则样例
| 规则样例 | 规则释义 |
|---|---|
begin:[upper],special:[yes],len:[maxlen:32,minlen:12] |
以大写字母开头,包含大小写字母、数字、特殊字符,长度为12-32位的随机数值 |
begin:[lower],special:[yes],len:[minlen:14] |
以小写字母开头,包含大小写字母、数字、特殊字符,长度为14-32位的随机数值 |
begin:[digit],special:[yes],len:[fixedlen:15] |
以数字开头,包含大小写字母、数字、特殊字符,长度为15位 |
begin:[upper] |
以大写字母开头,包含大小写字母、数字,长度为16位 |
special:[yes] |
以任意字母或数字开头,包含大小写字母、数字、特殊字符,长度为16位 |
len:[fixedlen:15] |
以任意字母或数字开头,包含大小写字母、数字,长度为15位 |
begin:[upper],special:[yes] |
以大写字母开头,包含大小写字母、数字、特殊字符,长度为16位 |
begin:[lower],len:[maxlen:25,minlen:12] |
以小写字母开头,包含大小写字母、数字,长度为12-25位的随机数值 |
special:[yes],len:[fixedlen:15] |
以任意字母或数字开头,包含大小写字母、数字、特殊字符,长度为15位 |
五、代码示例
// 注册/修改密码页面
@Entry
@Component
struct RegisterPage {
@State newPassword: string = '';
build() {
Column() {
Text("注册新账号")
.fontSize(24)
.margin({ top: 50, bottom: 30 })
// 用户名输入框
TextInput({ placeholder: '用户名' })
.type(InputType.USER_NAME)
.width('90%')
.margin({ bottom: 16 })
// 新密码输入框 - 带强密码生成
TextInput({ placeholder: '新密码' })
.enableAutoFill(true) // 开启自动填充
.type(InputType.NEW_PASSWORD) // 新密码类型
.passwordRules('begin:[lower],special:[yes],len:[maxlen:32,minlen:12]')
.showPasswordIcon(true)
.width('90%')
.margin({ bottom: 36 })
.onChange((value: string) => {
this.newPassword = value;
})
// 注册按钮
Button('注册')
.width('90%')
.height(48)
.backgroundColor('#007DFF')
.borderRadius(24)
.enabled(this.newPassword !== '')
.onClick(() => {
this.doRegister();
})
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Start)
.padding(20)
}
private doRegister() {
console.info('注册成功');
}
}
通过在TextInput上设置passwordRules属性,可以自定义强密码的生成规则(begin首位类型、special特殊字符、len长度范围),帮助用户创建更安全的密码,提升账号安全性。
更多推荐




所有评论(0)