标签: bluetooth-oob

使用QR码作为带外(OOB)通道的蓝牙安全简单配对(SSP)

我有一个Windows 7应用程序,它使用Stollmann SDK成功地将PC与Android绑定.蓝牙MAC地址,哈希和随机化器的双向交换通过NFC 在带外进行:

应用qr代码

遗憾的是,Windows应用程序的源代码无法在此处共享.在Android端,一旦收到NDEF消息,就不需要应用程序,安全简单配对由操作系统(通过HandoverManager?)执行application/vnd.bluetooth.ep.oob.

现在我正在尝试创建一个Android应用程序,它将使用单向身份验证通过扫描的QR代码(而不是NFC)执行OOB配对.

自定义QR码将显示在PC屏幕上(由ZXing.Net生成)并包含蓝牙MAC地址,散列和随机发生器.

然而,在Android中似乎尚未实现OOB绑定 -

BluetoothAdapter.java:

/**
 * Read the local Out of Band Pairing Data
 * <p>Requires {@link android.Manifest.permission#BLUETOOTH}
 *
 * @return Pair<byte[], byte[]> of Hash and Randomizer
 *
 * @hide
 */
public Pair<byte[], byte[]> readOutOfBandData() {
    if (getState() != STATE_ON) return null;
    //TODO(BT
    /*
    try {
        byte[] hash;
        byte[] randomizer;

        byte[] ret = mService.readOutOfBandData(); …
Run Code Online (Sandbox Code Playgroud)

android qr-code bluetooth android-bluetooth bluetooth-oob

11
推荐指数
1
解决办法
3794
查看次数

Android上的蓝牙"带外"(OOB)配对?

我一直在网上搜索,并没有看到任何关于如何准确实现OOB配对的方法.我希望有人能指点我一些示例代码来帮助我.Android开发者网站中的聊天示例根本没有真正涉及这种类型的配对.

基本上,我有一个Android平板电脑,我想安全地与一个用C++编写的设备配对,没有内置的显示/ IO机制.要配对的平板电脑将充当GUI/IO接口,我将通过蓝牙发回消息和第四个消息.因此,我想通过OOB配对方案将平板电脑与每台设备进行安全配对.

我理解OOB的概念,但是当我在android.developers.com网站上查找我的Android客户端代码时,我很难找到适当的方法来调用.另外,在查看bluez的东西时,我找不到太多可以继续使用我的C++编写的服务器.

基本用例是用户将通过USB连接将平板电脑连接到设备.USB连接将有助于传递每个设备的密钥/ mac地址,然后使用该信息对蓝牙.

我可以弄清楚USB部分,但是一旦我在客户端和服务器上获得密钥和必要信息,我似乎无法找到正确的方法来调用两端成功并安全地配对.

我已经有一个客户端/服务器通过不安全的连接进行通话,所以我遇到的唯一问题就是两端的实际配对.一旦我配对,我就可以使用secureRFComm来完成我未来的所有消息传递.

android android-bluetooth bluetooth-oob pairing

9
推荐指数
2
解决办法
1万
查看次数

蓝牙配对-如何显示简单的“取消/配对”对话框?

我已经在GitHub上为这个问题准备了一个简单的测试项目

我正在尝试创建一个Android应用,该应用将从计算机屏幕扫描QR码,然后使用数据(MAC地址和PIN或哈希)与蓝牙设备轻松配对(绑定)。

与流行的InstaWifi应用类似-但适用于经典蓝牙。

出于测试目的,我尚未执行任何条形码扫描,而仅显示设备列表:

设备清单

用户触摸其中一台设备后,将在MainActivity.java中尝试配对:

private void startBluetoothPairing(BluetoothDevice device) {
    Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
    pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
    pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
                BluetoothDevice.PAIRING_VARIANT_PIN);
    pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, 1234);
    //device.setPin(new byte[]{1,2,3,4});  <- DOES NOT CHANGE ANYTHING
    //device.setPairingConfirmation(false);
    startActivityForResult(pairingIntent, REQUEST_BT_SETTINGS);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,弹出窗口仍然要求输入PIN:

销对话框

因为我实际上已经在源代码中指定了PIN,所以我实际上希望显示另一个更简单的系统对话框(在进行NFC OOB配对时会显示该对话框):

配对对话框

通过搜索解决方案,我知道有一个setPin()方法,但是它在这里不适用(或者是?)-因为我正在尝试将整个智能手机与蓝牙设备配对,而不仅是与应用程序配对...

我的问题:如何使Android OS显示简单的“取消/配对”对话框?

在GitHub上搜索蓝牙配对请求字符串未显示任何提示...

更新:根据unrealsoul007的建议(感谢),我已经在MainActivity.java中更新了源代码,现在显示了简单的“取消/配对”对话框:

private void startBluetoothPairing(BluetoothDevice device) {
    Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
    pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
    pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
        BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION);
    pairingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(pairingIntent, REQUEST_BT_PAIRING);
}
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何完成配对过程-因为甚至在关闭对话框之前onActivityResult都会调用resultCode=0

@Override …
Run Code Online (Sandbox Code Playgroud)

android bluetooth android-intent android-bluetooth bluetooth-oob

4
推荐指数
1
解决办法
6200
查看次数