1.修复获取私钥0x09 bug
2.添加安卓机MTU设置
This commit is contained in:
parent
4a2394d57f
commit
a2e7ad12f4
@ -30,6 +30,8 @@ export default {
|
|||||||
characteristicId2: '',
|
characteristicId2: '',
|
||||||
lockId: '',
|
lockId: '',
|
||||||
publicKey: new Uint8Array(16),
|
publicKey: new Uint8Array(16),
|
||||||
|
commKey: new Uint8Array(16),
|
||||||
|
signKey: new Uint8Array(16),
|
||||||
showList: true,
|
showList: true,
|
||||||
number: 1
|
number: 1
|
||||||
}
|
}
|
||||||
@ -82,13 +84,14 @@ export default {
|
|||||||
let authCodeBuffer = new ArrayBuffer(originAuthCodeLen)
|
let authCodeBuffer = new ArrayBuffer(originAuthCodeLen)
|
||||||
let authCodeBinaryData = new Uint8Array(authCodeBuffer)
|
let authCodeBinaryData = new Uint8Array(authCodeBuffer)
|
||||||
|
|
||||||
for(let i=0; i < keyId.length; i++){
|
for(let i=0; i < authUserId.length; i++){
|
||||||
authCodeBinaryData[i] = keyId.charCodeAt(i)
|
authCodeBinaryData[i] = authUserId.charCodeAt(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i=0; i < authUserId.length; i++){
|
for(let i=0; i < keyId.length; i++){
|
||||||
authCodeBinaryData[keyId.length + i] = authUserId.charCodeAt(i)
|
authCodeBinaryData[authUserId.length + i] = keyId.charCodeAt(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
const number = keyId.length + authUserId.length
|
const number = keyId.length + authUserId.length
|
||||||
authCodeBinaryData[number + 0] = (nowTime & 0xff000000) >> 24
|
authCodeBinaryData[number + 0] = (nowTime & 0xff000000) >> 24
|
||||||
authCodeBinaryData[number + 1] = (nowTime & 0xff0000) >> 16
|
authCodeBinaryData[number + 1] = (nowTime & 0xff0000) >> 16
|
||||||
@ -99,9 +102,11 @@ export default {
|
|||||||
authCodeBinaryData[number + 4 + i] = this.publicKey[i]
|
authCodeBinaryData[number + 4 + i] = this.publicKey[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('钥ID', keyId, '用户ID', authUserId, '时间戳', nowTime,'公钥', Array.from(this.publicKey))
|
||||||
console.log('md5前的数据', Array.from(authCodeBinaryData, byte =>
|
console.log('md5前的数据', Array.from(authCodeBinaryData, byte =>
|
||||||
byte.toString(10)).join(','))
|
byte.toString(10)).join(','))
|
||||||
const codeMd5 = md5(authCodeBinaryData)
|
const md5Hex = md5(authCodeBinaryData)
|
||||||
|
const codeMd5 = new Uint8Array(md5Hex.match(/.{1,2}/g).map(byte => parseInt(byte, 16)))
|
||||||
console.log('md5后的数据', codeMd5, codeMd5.length)
|
console.log('md5后的数据', codeMd5, codeMd5.length)
|
||||||
|
|
||||||
const bufferLength = codeMd5.length + 12 + 107
|
const bufferLength = codeMd5.length + 12 + 107
|
||||||
@ -156,7 +161,7 @@ export default {
|
|||||||
binaryData[flagNumber] = codeMd5.length
|
binaryData[flagNumber] = codeMd5.length
|
||||||
flagNumber += 1
|
flagNumber += 1
|
||||||
for (let i = 0; i < codeMd5.length; i++) {
|
for (let i = 0; i < codeMd5.length; i++) {
|
||||||
binaryData[flagNumber + i] = codeMd5.charCodeAt(i)
|
binaryData[flagNumber + i] = codeMd5[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
binaryData[8] = Math.ceil((bufferLength - 12)/16) * 16 / 256
|
binaryData[8] = Math.ceil((bufferLength - 12)/16) * 16 / 256
|
||||||
@ -300,23 +305,32 @@ export default {
|
|||||||
console.log('设备特征值改变')
|
console.log('设备特征值改变')
|
||||||
console.log(res)
|
console.log(res)
|
||||||
let binaryData = new Uint8Array(res.value)
|
let binaryData = new Uint8Array(res.value)
|
||||||
console.log('ecb解密前的数据', Array.from(binaryData))
|
if(binaryData[0] === 239 && binaryData[1] === 1 && binaryData[2] === 238 && binaryData[3] === 2) {
|
||||||
// 明文
|
console.log('设备返回的数据', Array.from(binaryData), Array.from(binaryData, byte =>
|
||||||
if(binaryData[7] === 0x20) {
|
byte.toString(16)).join(','))
|
||||||
if(binaryData[12] === 48 && binaryData[13] === 144){
|
// 明文 0x20 SM4事先约定密钥 0x22
|
||||||
const publicKey = binaryData.slice(15, 31)
|
if(binaryData[7] === 0x20) {
|
||||||
console.log('公钥', Array.from(publicKey))
|
if(binaryData[12] === 48 && binaryData[13] === 144){
|
||||||
that.publicKey = publicKey
|
const publicKey = binaryData.slice(15, 31)
|
||||||
|
console.log('公钥', Array.from(publicKey))
|
||||||
|
that.publicKey = publicKey
|
||||||
|
}
|
||||||
|
} else if(binaryData[7] === 0x22) {
|
||||||
|
const cebBinaryData = binaryData.slice(12, binaryData.length - 2)
|
||||||
|
console.log('sm4返回参数', Array.from(cebBinaryData))
|
||||||
|
const key = new Uint8Array(16)
|
||||||
|
for (let i = 0; i < that.lockId.length; i++) {
|
||||||
|
key[i] = that.lockId.charCodeAt(i)
|
||||||
|
}
|
||||||
|
const decrypted = sm4.decrypt(cebBinaryData, key, { mode: 'ecb', output: 'array' })
|
||||||
|
console.log('ecb解密后的数据', decrypted)
|
||||||
|
if(decrypted[0] === 48 && decrypted[1] === 145) {
|
||||||
|
that.commKey = decrypted.slice(3, 19)
|
||||||
|
that.signKey = decrypted.slice(19, 35)
|
||||||
|
console.log('commKey', Array.from(that.commKey))
|
||||||
|
console.log('signKey', Array.from(that.signKey))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if(binaryData[7] === 0x22) {
|
|
||||||
const cebBinaryData = binaryData.slice(12, 28)
|
|
||||||
console.log('sm4返回参数', Array.from(cebBinaryData))
|
|
||||||
const key = new Uint8Array(16)
|
|
||||||
for (let i = 0; i < that.lockId.length; i++) {
|
|
||||||
key[i] = that.lockId.charCodeAt(i)
|
|
||||||
}
|
|
||||||
const decrypted = sm4.decrypt(cebBinaryData, key, { mode: 'ecb', output: 'array' })
|
|
||||||
console.log('ecb解密后的数据', decrypted)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -359,6 +373,18 @@ export default {
|
|||||||
}
|
}
|
||||||
that.showList = false
|
that.showList = false
|
||||||
that.notifyBLECharacteristicValueChange()
|
that.notifyBLECharacteristicValueChange()
|
||||||
|
if(uni.$u.os() === 'android') {
|
||||||
|
uni.setBLEMTU({
|
||||||
|
deviceId: that.deviceId,
|
||||||
|
mtu: 256,
|
||||||
|
success() {
|
||||||
|
console.log('mtu设置成功')
|
||||||
|
},
|
||||||
|
fail(res) {
|
||||||
|
console.log('mtu设置失败', res)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '数据获取成功',
|
title: '数据获取成功',
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user