陈福行 3 anni fa
parent
commit
5740aa6d2c

+ 1
- 1
README.md Vedi File

@@ -85,7 +85,7 @@ byte[] mcuEncrypt(int cid, String mac, byte[] payload);
/**
Broadcast data decryption method
*/
byte[] decryptBroadcast(int cid, int vid,int pid, byte[] payload);
byte[] decryptBroadcast(byte[] payload);

```


+ 1
- 1
README_zh.md Vedi File

@@ -92,7 +92,7 @@ byte[] mcuEncrypt(int cid, String mac, byte[] payload);
/**
广播数据解密方法
*/
byte[] decryptBroadcast(int cid, int vid,int pid, byte[] payload);
byte[] decryptBroadcast(byte[] payload);

```


+ 38
- 11
app/src/main/java/com/elinkthings/ailinksecrettooldemo/AnalyticalDataUtil.java Vedi File

@@ -259,8 +259,7 @@ public class AnalyticalDataUtil {
SystemClock.sleep(100);
BluetoothGattService mGattService = MyBleDeviceUtils.getService(mBluetoothGatt, BleConfig.UUID_SERVER_AILINK);
if (mGattService != null) {
BluetoothGattCharacteristic mCharacteristic = MyBleDeviceUtils
.getServiceWrite(mGattService, BleConfig.UUID_WRITE_NOTIFY_AILINK);
BluetoothGattCharacteristic mCharacteristic = MyBleDeviceUtils.getServiceWrite(mGattService, BleConfig.UUID_WRITE_NOTIFY_AILINK);
if (mCharacteristic != null) {
mCharacteristic.setValue(bytes);
mCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
@@ -352,22 +351,50 @@ public class AnalyticalDataUtil {
}



/**
* 将广播数据进行解密
*
* @param cid cid
* @param vid vid
* @param pid pid
* @param payload byte[]
* @return byte[]
*/
public byte[] decryptBroadcast(int cid, int vid,int pid, byte[] payload) {
byte[] data = null;
if (payload != null && payload.length >= 1) {
data = AiLinkBleCheckUtil.decryptBroadcast(cid, vid, pid,payload);
public byte[] decryptBroadcast(byte[] payload) {
if (payload != null && payload.length >= 20) {
byte[] cidB = new byte[1];
byte[] vidB = new byte[1];
byte[] pidB = new byte[1];
int start = 0;
System.arraycopy(payload, start, cidB, 0, cidB.length);
start += 1;
System.arraycopy(payload, start, vidB, 0, vidB.length);
start += 1;
System.arraycopy(payload, start, pidB, 0, pidB.length);
start += 1;
//特殊广播,包含是否可以绑定的标志
int cid = (cidB[0] & 0xff);
int vid = (vidB[0] & 0xff);
int pid = (pidB[0] & 0xff);
byte sum = payload[9];
byte[] decryptData = new byte[10];//根据协议取出需要解密的广播数据
System.arraycopy(payload, 10, decryptData, 0, decryptData.length);
byte newSum = cmdSum(decryptData);
if (sum == newSum) {
byte[] data = AiLinkBleCheckUtil.decryptBroadcast(cid, vid, pid, decryptData);
return data;
}
}
return data;
return payload;
}


/**
* 校验累加,从1开始加
*/
private static byte cmdSum(byte[] data) {
byte sum = 0;
for (byte datum : data) {
sum += datum;
}
return sum;
}

public void close() {

+ 1
- 18
app/src/main/java/com/elinkthings/ailinksecrettooldemo/MainActivity.java Vedi File

@@ -356,24 +356,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
* @param data 自定义厂商数据
*/
private void decryptBroadcastExample(byte[] data){
if (data.length < 3)
return;
byte[] cidB = new byte[1];
byte[] vidB = new byte[1];
byte[] pidB = new byte[1];
int start = 0;
System.arraycopy(data, start, cidB, 0, cidB.length);
start += 1;
System.arraycopy(data, start, vidB, 0, vidB.length);
start += 1;
System.arraycopy(data, start, pidB, 0, pidB.length);
start += 1;
//特殊广播,包含是否可以绑定的标志
int cid = (cidB[0] & 0xff);
int vid = (vidB[0] & 0xff);
int pid = (pidB[0] & 0xff);
byte[] decryptData=new byte[10];//根据协议取出需要解密的广播数据
mAnalyticalDataUtil.decryptBroadcast(cid, vid, pid, decryptData);
byte[] decryptData= mAnalyticalDataUtil.decryptBroadcast(data);//获取解密后的数据

}


Loading…
Annulla
Salva