如何将altbeacon加密为AES-ECB格式。
我一直在使用颤振,但在颤振方面。 我想它无法加密,因为传递给 altbeacon 库的数据是信标数据格式.
beaconTransmitter?.startAdvertising(beacon, object : AdvertiseCallback() {
override fun onStartSuccess(settingsInEffect: AdvertiseSettings?) {
super.onStartSuccess(settingsInEffect)
advertiseCallback(true)
}
由于多种原因,使用蓝牙信标加密非常复杂:
- 蓝牙信标的有效载荷很小,约为 22 可用字节, 这对于完全加密的消息来说太小了. 因此, 信标通常使用单向哈希,在应用特定加密算法后将其剥离为较小的字节数.
- iBeacon、AltBeacon 和 Eddystone-UID 等标准信标格式将这个有限的有效载荷划分为明文(未加密(标识符的字段。
- 像Eddystone-EID这样使用加密的格式需要复杂的系统为每个信标发射器配置一个特定于时钟的哈希值,然后在接收端使用匹配算法对其进行解码。 然后,他们将加密的有效负载剥离到几个字节。
如果你想用加密算法建立一个哈希,然后将结果减少到一个8字节的有效载荷,你可以在Eddystone-EID帧中传输它,如下所示。只需将"0x0001020304050607"中的 8 个字节替换为您的哈希数据即可。
Beacon beacon = new Beacon.Builder()
.setId1("0x0001020304050607") // Encrypted Identifier
company code
.setTxPower(-59)
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout(BeaconParser.EDDYSTONE_EID_LAYOUT);
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartFailure(int errorCode) {
Log.e(TAG, "Advertisement start failed with code: "+errorCode);
}
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
Log.i(TAG, "Advertisement start succeeded.");
}
});
为了符合 Eddystone-EID 规范,在生成散列字节时需要满足非常具体的要求。 如果您不关心满足规范,欢迎您以任何您希望的方式生成这些字节,只要它们符合您自己的用例。