如何在 JSONStore 中存储加密密钥/密码

Posted

技术标签:

【中文标题】如何在 JSONStore 中存储加密密钥/密码【英文标题】:How to store encryption key/password in JSONStore 【发布时间】:2016-07-29 16:02:14 【问题描述】:

我正在使用 JSONStore 在我的项目中存储一些数据,但我的问题是我想存储一个用于解锁数据的密钥。

MobileFirst 是否提供任何方式

在客户端或服务器端安全地存储密钥。 有什么方法可以从适配器获取密钥或解锁 JSONStore 通过连接到适配器。

【问题讨论】:

【参考方案1】:

我相信您希望加密 JSONStore 集合中的数据,同时您希望能够在不要求用户输入密码的情况下解密该集合。

方法一:客户端

如果您想在 ios 中完成此操作,您可以使用 Touch ID 来实现此目的。您可以前往https://www.ibm.com/support/knowledgecenter/SSHS8R_7.1.0/com.ibm.worklight.dev.doc/devref/t_setting_up_touch_id_jsonstore.html

了解更多信息

对于 android,没有开箱即用的集成,但在 Android Marshmallow (6.0) 中,您也可以使用指纹扫描仪的 API。 https://developer.android.com/about/versions/marshmallow/android-6.0.html#fingerprint-authentication

基本上,通过上述方法,您可以创建一个随机密码并将其安全地存储在设备中。然后设备会提示用户进行身份验证(指纹扫描仪或 PIN 码),如果成功,您将可以访问该随机密码。

方法二:服务器端

在这种方法中,您将使用适配器来散列从客户端发送的令牌/字符串。为此,您需要使用保持不变的内容,即设备 ID WL.Device.getID() https://www.ibm.com/support/knowledgecenter/SSHS8R_7.1.0/com.ibm.worklight.apiref.doc/html/refjavascript-client/html/WL.Device.html#getID

app.js

WL.Device.getID(function(response)
  var id = response.deviceID;

  var req = WLResourceRequest('/adapters/Util/hash', WLResourceRequest.POST);

  return req.sendFormParameters(
    pass: id 
  );
).then(function(response)
  var passwordHash = response.responseJSON.hash;


  // open JSONStore collection with the passwordHash
);

在您的适配器中,您可以散列您的密码/设备 ID,然后将其返回到设备以打开 JSONStore 集合。如果您想在 Java 适配器中对密码进行哈希处理,可以查看以下帖子 How can I hash a password in Java?

这种方法有点棘手,因为您需要以某种方式对其进行身份验证,以确保您只为合法用户打开/解密 JSONStore。

【讨论】:

以上是关于如何在 JSONStore 中存储加密密钥/密码的主要内容,如果未能解决你的问题,请参考以下文章

如何为多个收件人加密一封邮件?

在钥匙串中存储用于加密密码的密钥的最佳位置在哪里

如何为 Camellia 密码提供正确的密钥并在 Java 中进行加密

如何在数据库中存储加密的机密用户信息,需要在运行时解密?

使用 OpenSSL API 读取公钥的密码回调

Java AES加密和静态密钥解密