陈福行 3 anni fa
parent
commit
a2e58cca5e

+ 1
- 1
.idea/compiler.xml Vedi File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="9" />
<bytecodeTargetLevel target="1.8" />
</component>
</project>

+ 1
- 1
.idea/gradle.xml Vedi File

@@ -8,7 +8,6 @@
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-5.1.1" />
<option name="gradleJvm" value="1.8 (2)" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
@@ -16,6 +15,7 @@
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings>
</option>
</component>

+ 1
- 1
.idea/misc.xml Vedi File

@@ -5,7 +5,7 @@
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
</configurations>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

+ 5
- 0
README.md Vedi File

@@ -82,6 +82,11 @@ A7 data encryption method, cid is the product ID, and the ble protocol will incl
byte[] mcuEncrypt(int cid, String mac, byte[] payload);


/**
Broadcast data decryption method
*/
byte[] decryptBroadcast(int cid, int vid,int pid, byte[] payload);

```

### 5、How to use

+ 11
- 0
README_zh.md Vedi File

@@ -83,6 +83,17 @@ byte[] mcuDecrypt(byte[] hex, String mac);
byte[] mcuEncrypt(int cid, String mac, byte[] payload);



/**
A7数据加密方法,cid为产品ID,ble协议中会包含
*/
byte[] mcuEncrypt(int cid, String mac, byte[] payload);

/**
广播数据解密方法
*/
byte[] decryptBroadcast(int cid, int vid,int pid, byte[] payload);

```

### 五、使用方法

+ 1
- 1
app/build.gradle Vedi File

@@ -36,5 +36,5 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

implementation 'com.github.elinkthings:AILinkSecretAndroid:1.0.0'
implementation 'com.github.elinkthings:AILinkSecretAndroid:2.0.0'
}

+ 18
- 0
app/src/main/java/com/elinkthings/ailinksecrettooldemo/AnalyticalDataUtil.java Vedi File

@@ -352,6 +352,24 @@ 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);
}
return data;
}

public void close() {
if (mBluetoothGatt != null) {
mBluetoothGatt.disconnect();

+ 33
- 0
app/src/main/java/com/elinkthings/ailinksecrettooldemo/MainActivity.java Vedi File

@@ -328,6 +328,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
super.onScanResult(callbackType, result);
String address = result.getDevice().getAddress();
saveScanData(address);
// SparseArray<byte[]> manufacturerSpecificData = result.getScanRecord().getManufacturerSpecificData();//获取自定义厂商数据列表,正常情况只有1个
// if (manufacturerSpecificData.size() > 0) {
// byte[] data = manufacturerSpecificData.get(0);
// decryptBroadcastExample(data);
// }

}

@@ -345,6 +350,34 @@ 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);

}


/**
* 搜索到的数据到列表
*/

Loading…
Annulla
Salva