0

虽然我尝试.secret().trust()gun.user ,但有意想不到的结果。我如何从其他用户那里获取数据以便在应用程序中进行访问控制?以及我需要知道如何在没有错误消息“无法解密”的情况下解密数据。

  • 节点 10.16.0
  • 枪 0.2019.515
  • 铬 74.0.3729.169

左右分别有 User03 和 User01。我这个测试的目标是 User01 获取 User03 的秘密数据。

1.将数据放在User03下,在两个控制台上查看数据。

S.user.get('test').put('come on'); // on left console as user03

S.user.get('test').once(console.log); // on left console as user03
user03.get('test').once(console.log); // on right console as user01

放置并检查

2.让User03 .trust()User01在左边。

S.user.get('test').trust( user01 ); // left

相信

3.secret使用 User03 的 pair 制作 User03 的数据。

S.user.get('test').secret( S.user.pair ); //left

秘密

4.检查两边的加密数据。

S.user.get('test').once(console.log); // on left console as user03
user03.get('test').once(console.log); // on right console as user01

检查秘密

5. 使用右边的 user01 对解密 user03 的秘密。

它收到错误消息“无法解密”。

user03.get('test').once((data)=>{
    SEA.decrypt(data, S.user.pair, console.log);
});; // right

6.检查STEP 5的返回对象内部。

我希望输出“加油”作为解密数据。

4

1 回答 1

0

@huhsame,很抱歉延迟回答这个问题。(有紧急事项,请在 Twitter 或 Gitter 中标记我)

主要问题是目前(2019 年 8 月)不稳定的 alpha API 方法User.trustUser.secret

然而,我们有一个稳定的生产就绪的低级 API,您可以使用它来代替,称为SEA

这是一个完整的例子,说明如何做你想做的事:

var alice = await SEA.pair();
var bob = await SEA.pair();
var enc = await SEA.encrypt('shared data', await SEA.secret(bob.epub, alice));
await SEA.decrypt(enc, await SEA.secret(alice.epub, bob));

这就是 GUN 和 User API 方法在下面使用的。

您会看到,alice并且是您可能已经完成bob的查找背后的相同密钥对(ECDSA 和 ECDH 的 pub 和 priv) 。gun.user(ecdsaPubKey)

await SEA.secret(ecdhPubKey, alice)在您的目标用户的公钥(他们的 ECDH 公钥,而不是 ECDSA)和“你自己”(Alice)之间获得一个共同的共享秘密。如何做到这一点以混合颜色着称。

然后.encrypt(.decrypt(你所期望的,只要有相同的“密码”(第二个参数),这是通过推导secret两个用户的共同点得到的,即使在相反的方向上也给出相同的输出(鲍勃,目标用户,将他的密钥对作为“你”,将 Alice 的 ECDH 公钥作为第一个参数传递给secret)。

希望这会为您争取时间,自己动手,直到User.trustUser.secret(与SEA.secret已经有效的方法相比)更高级别的便利方法准备好。

于 2019-08-26T08:08:00.057 回答