verifyPassword(验证设备密码)
新接入请使用 推荐入口。本页保留给仍在调用 POST /openapi/verifyPassword 的兼容对接。
verifyPassword:验证设备密码
要点:https://openapi.lechange.cn/openapi/verifyPassword · 见 错误码
验证设备密码。
请求参数
| 参数名 | 参数类型 | 是否必填 | 默认值 | 合法值 | 参数说明 |
|---|---|---|---|---|---|
| token | String | 是 | 管理员accessToken | ||
| deviceId | String | 是 | 设备序列号 | ||
| password | String | 是 | 设备密码需加密传输,具体加密详细说明请见下文 | 设备密码 v1 槽 加密后的字符串(本 OpenAPI 路径字段名为 password) |
password加密算法详细说明:
password计算值的公式为:Base64(AES256_CBC(sourcePassword,key[],iv[]));
加密规则如下:
1、采用CBC分组加密的方式,算法为AES/CBC/PKCS5Padding;
2、sourcePassword为设备的明文密码;
3、key[]为密匙(key)的二进制数组;
4、密钥(key)为:LowerCase(MD5(UpperCase(Base64(KDF(deviceId,MD5(appsecret)))))),KDF算法为PBKDF2WithHmacSHA256,迭代1200次,导出密钥长度 256;
5、iv[]为初始化向量的二进制数组,为:MD5(appSecret),采用Java自带的MessageDigest的MD5算法加密。
设备新密码规则要求为:
1、密码组成必须包含数字、大写字母、小写字母和特殊字符中的至少两种,长度为8~32字符长度。其中特殊字符为除了【'】【"】【;】【:】【&】【空格】这六个字符外的任意可见字符;
2、密码不能有中文字符。
passwordV2 加密(V2)
v2 能力 device.password.verify 的 passwordV2 算法如下(本遗留路径若扩展 V2 字段时同此规则):
设备密码字段加密(v2 OpenAPI)
适用字段:device.password.verify 的 passwordV2;device.password.set 的 oldPasswordV2、newPasswordV2。三者同一套算法(与绑定页 encryptCodeV2 同族,字段名不同)。
| 步骤 | 说明 |
|---|---|
| 1. 明文 | 设备密码 UTF-8 字符串(newPasswordV2 须先满足下文强度规则再加密) |
| 2. 因子 | pwdFactor = "op_api_" + appId + "_PWD_KEY_" + deviceId(appId 取请求 system.appId,须与派生时一致) |
| 3. Salt | salt = SHA-256(UTF-8(pwdFactor)) 的前 16 字节 |
| 4. PBKDF2 | PBKDF2WithHmacSHA256:password=deviceId,salt=上一步,迭代 1200 次,导出 256 位 → kdfRaw |
| 5. AES 密钥 | kdfBase64 = Base64(kdfRaw)(标准 Base64);aesKey = SHA-256(UTF-8(kdfBase64.toUpperCase())) → 32 字节 AES-256 密钥 |
| 6. Nonce | 加密时随机 12 字节(每次加密不同) |
| 7. 加密 | AES/GCM/NoPadding,GCM tag 128 bit;密文块 = AES-GCM(明文)(含 tag) |
| 8. 传参值 | Base64(nonce[12] ‖ 密文块),作为对应字段字符串 |
不使用 appSecret 参与 v2 密钥派生。
新密码明文(仅 newPasswordV2 加密前):长度 8~32;数字、大写字母、小写字母、特殊字符中至少两类;特殊字符为除 '、"、;、:、&、空格外的可见字符;不得含中文。
验密成功后改密:可将本次请求的 passwordV2 整段密文原样填入 oldPasswordV2(同一 appId、deviceId、同一明文)。
请求示例
password 须为按上文算法生成的 Base64 密文,不可传设备明文密码。下列值为占位示例。
{
"id":"d5c287b4-5b2f-4f03-baf5-8032c5c354af",
"system":{
"ver":"1.0",
"appId":"lcdxxxxxxxxx",
"sign": "xjhCQBoJ9hRDsCjyDcHjtDNzRZ3ZJezcawsfWeiaoxU=",
"time": 1706511734,
"nonce": "f5a1ae2d-c09c-4d39-a744-83a5c2c653c2"
},
"params":{
"token": "<yourAccessToken>",
"deviceId":"TESTQWERXXXX",
"password":"dGVzdEVuY3J5cHRlZFBhc3N3b3JkUGxhY2Vob2xk"
}
}
响应字段
无data数据返回
响应示例
{
"result":{
"msg":"操作成功。",
"code":"0"
},
"id":"d5c287b4-5b2f-4f03-baf5-8032c5c354af"
}
错误码
本接口可能返回下列码;完整分组见 错误码。
网关与鉴权(SN / TK / OP)
| 错误码 | 错误码说明 | 下一步 |
|---|---|---|
SN1001 | 签名异常 | 按 签名 核对 sign |
TK1002 | token 无效或过期 | 重新获取 token |
OP1002 | 缺少必填参数 | 补必填字段 |
OP1003 | 参数不合法 | 按本页参数表核对 |
OP1039 | 分钟级限流 | 等到下一分钟再试 |
OP1040 | 调用超限 | 降低频率 |
DV1007 | 设备离线或超时 | 等设备上线 |
子账号(SUB)
| 错误码 | 错误码说明 | 下一步 |
|---|---|---|
SUB1001 | 子账号无指定权限 | 在 子账号策略 中补权限 |
SUB1002 | 子账号无任何设备权限 | 授权设备或调整策略 |
SUB1005 | 子账号 token 过期 | 重新 获取子账号 token |
SUB1006 | 子账号与设备无授权关系 | 核对 Resource 与设备序列号 |
SUB1008 | 子账号未绑定当前应用 | 先创建并绑定子账号 |
SUB1007 | 创建子账号失败 | 核对参数后重试 |
SUB1009 | 子账号创建失败,账号格式错误 | account 须为手机号或邮箱 |
SUB1010 | 子账号创建失败,账号已存在 | 勿重复绑定同一子账号到应用 |
更多见 错误码 · SUB。
设备访问与通道(DV10xx)
| 错误码 | 错误码说明 | 下一步 |
|---|---|---|
DV1007 | 设备离线或超时 | 等设备上线;低电休眠先 唤醒 |
DV1009 | 设备正忙 | 稍后重试 |
DV1012 | 分享/授权设备权限不足 | 核对子账号 Permission / Resource |
DV1019 | 能力集不支持 | 确认型号与 设备能力 |
DV1020 | 通道离线 | 检查通道与设备状态 |
DV1026 | 不支持此功能 | 换接口或升级固件 |
DV1028 | 未绑定或通道不存在 | 核对 deviceId / channelId |
DV1030 | 设备休眠 | 唤醒后再调 |
DV1057 | 通道不存在 | 核对通道号 |
DV1061 | 设备响应超时 | 检查设备网络 |
DV1062 | 需先唤醒设备 | 调用唤醒接口 |
DV1069 | 不满足操作条件 | 见 msg |
设备密码(DV10xx)
| 错误码 | 错误码说明 | 下一步 |
|---|---|---|
DV1016 | 设备密码错误 | 核对旧密码 |
DV1025 | SC 码或密码错误 | 核对安全码 |
DV1027 | 安全码错误 | 核对设备安全码 |
DV1042 | 密码错误次数过多已锁定 | 等待解锁 |
DV1054 | 新密码不符合规则 | 按本页密码规则修改 |
说明
本路径为旧版 OpenAPI(/openapi/verifyPassword),仅支持管理员 accessToken;子用户、子账号请用 device.password.verify(passwordV2、子账号 Config 等见该页)。