带加密的Objective-C iOS BLE写入值

时间:2018-09-05 19:32:57

标签: ios objective-c encryption bluetooth

我当前正在开发一个应用程序,该应用程序充当BLE Central与蓝牙外围设备进行通信。我正在尝试通过加密向Peripheral写入值,这样它就不会被其他人嗅到。

我已将服务和特性声明为NSArray。

    myservices = @[[CBUUID UUIDWithString:@"1stServiceUUID"], [CBUUID UUIDWithString:@"2ndServiceUUID"]];

mycharacterstics = @[[CBUUID UUIDWithString:@"1sCharacteristicUUID"], [CBUUID UUIDWithString:@"2ndCharacteristicUUID"]];

当应用在附近找到匹配的服务时,应用会连接它并立即从didDiscoverCharacteristicsForService写入价值

    for (CBCharacteristic *characteristic in service.characteristics) {
    if ([characteristic.UUID isEqual:mycharacterstics[0]]) {
        _discoveredPeripheralCharactersticsNotify = characteristic;

        [peripheral setNotifyValue:YES forCharacteristic:characteristic];
    }

    if ([characteristic.UUID isEqual:mycharacterstics[1]]) {
        _discoveredPeripheralCharactersticsWrite = characteristic;

        [peripheral setNotifyValue:YES forCharacteristic:characteristic];
    }

    [self.discoveredPeripheral writeValue:testData forCharacteristic:characteristic type:CBCharacteristicWriteWithoutResponse];
}

预期结果:

应用程序在前景和后台均向外围设备写入加密的值。

实际结果:

应用程序在前景中:应用程序显示配对请求弹出窗口,用户想要“配对”或“取消”。如果选择“对”,则值将被加密,因此无法监听。如果选择“取消”,则仍写入未加密的值,以便可以对其进行嗅探。

应用程序在后台:应用程序不显示配对请求。无需加密就可以在连接后立即向外围设备写入值。

其他行为:

iOS 10及更低版本:如果应用程序位于前台,并且用户从配对请求弹出窗口中选择“取消”,则应用程序始终会写入加密值;如果应用程序位于后台,则应用程序会随机写入加密值。

我不明白为什么该应用在不同的操作系统版本中会有不同的表现。

问题:

我可以使应用程序始终通过加密来写入值吗?或者如果用户从配对请求弹出窗口中选择“取消”,那么应用程序就不会写入值?

如何根据用户的选择控制配对请求弹出窗口?

在后台运行应用程序时如何控制配对?

谢谢您的帮助。

致谢。

0 个答案:

没有答案