- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在用户空间中交换私有(private)数据。
因为 gun.grant
和 gun.trust
已弃用,所以我遵循了以下示例:
https://gun.eco/docs/SEA#quickstart
<script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gun/sea.js"></script>
<script>
// var Gun = require('gun'); // in NodeJS
// require('gun/sea');
var SEA = Gun.SEA;
;(async () => {
var pair = await SEA.pair();
var enc = await SEA.encrypt('hello self', pair);
var data = await SEA.sign(enc, pair);
console.log(data);
var msg = await SEA.verify(data, pair.pub);
var dec = await SEA.decrypt(msg, pair);
var proof = await SEA.work(dec, pair);
var check = await SEA.work('hello self', pair);
console.log(dec);
console.log(proof === check);
// now let's share private data with someone:
var alice = await SEA.pair();
var bob = await SEA.pair();
var enc = await SEA.encrypt('shared secret', await SEA.secret(bob.epub, alice));
await SEA.decrypt(enc, await SEA.secret(alice.epub, bob));
// `.secret` is Elliptic-curve Diffie–Hellman
// Bob allows Alice to write to part of his graph, he creates a certificate for Alice
var certificate = await SEA.certify(alice.pub, ["^AliceOnly.*"], bob)
// Alice logs in
const gun = Gun();
await gun.user().auth(alice);
// and uses the certificate
await gun.get('~'+bob.pub).get('AliceOnly').get('do-not-tell-anyone').put(enc, null, {opt: {cert: certificate}})
await gun.get('~'+bob.pub).get('AliceOnly').get('do-not-tell-anyone').once(console.log) // return 'enc'
})();
</script>
但它总是抛出“证书验证失败。”
我尝试了 user.auth
而不是 SEA.pair()
但仍然无法正常工作
最佳答案
SEA.certify
将替换已弃用的方法,以使其他人能够在您的图表上写入。 SEA.certify
var Alice = await SEA.pair()
var Bob = await SEA.pair()
var Dave = await SEA.pair()
// Alice wants to allow Bob and Dave to use write to her "inbox" and "stories" UNTIL TOMORROW
// On Alice's side:
var certificate = await SEA.certify([Bob.pub, Dave.pub], [{"*": "inbox", "+": "*"}, {"*": "stories"}], Alice, null, {expiry: Gun.state()+(60*60*24*1000)})
// Now on Bob/Dave's side, they can write to Alice's graph using gun.put:
gun.get('~'+Alice.pub).get('inbox').get('deeper'+Bob.pub).put('hello world', null, {opt: {cert: certificate}}) // {opt: {cert: certificate}} is how you use Certificate in gun.put
在相关说明中,还有一些其他非常有用的加密示例 here .
为了这个答案,我将发布它们:
一对一加密
///////////////////////////////////
// On my side - logged in as myself
///////////////////////////////////
var myPair = gun.user()._.sea;
// retrieve bob's user
const bob = gun.user(bobPublicKey);
// generate encryption secret using bob's epub and my pair
// this means only bob will be able to regenerate this secret with my pub key and his pair
const secret = await SEA.secret(bob.epub, myPair)
// encrypt the data using the secret
const encryptedData = await SEA.encrypt('private message for bob', secret);
////////////////////////////////////
// on Bob's side - logged in as Bob
///////////////////////////////////
const myPair = gun.user()._.sea;
// generate the secret - this will output the same secret generated by myself
// but this time we generate with bobs pair and my epub
const secret = await SEA.secret(myPair.epub, bob)
// just decrypt the data using the secret
const decryptedData = await SEA.decrypt(encryptedData, secret);
多用户加密
(async () => {
/////////////////////////////////////////////////////////////////
// Instead of logging in with actual users, we are
// going to generate SEA pairs which is basically the same thing
/////////////////////////////////////////////////////////////////
// User 1 encrypts one message
const user1 = await SEA.pair();
const plainMessage = 'Hello, how are you?';
const encryptionKey = 'this is my encryption key which is a normal string';
const encryptedMessage = await SEA.encrypt(plainMessage, encryptionKey);
// User 2, 3 and 4 will receive the message and decrypt it
const user2 = await SEA.pair();
const user3 = await SEA.pair();
const user4 = await SEA.pair();
// Each user gets an encrypted encryption key. If you print them, they all different
const encryptedEncryptionKeyUser2 = await SEA.encrypt(encryptionKey, await SEA.secret(user2.epub, user1));
const encryptedEncryptionKeyUser3 = await SEA.encrypt(encryptionKey, await SEA.secret(user3.epub, user1));
const encryptedEncryptionKeyUser4 = await SEA.encrypt(encryptionKey, await SEA.secret(user4.epub, user1));
// Each user decrypts his own encrypted encryption key
// These three decrypted encryptions keys that we get are all the same
const decryptedEncryptionKeyUser2 = await SEA.decrypt(
encryptedEncryptionKeyUser2,
await SEA.secret(user1.epub, user2)
);
const decryptedEncryptionKeyUser3 = await SEA.decrypt(
encryptedEncryptionKeyUser3,
await SEA.secret(user1.epub, user3)
);
const decryptedEncryptionKeyUser4 = await SEA.decrypt(
encryptedEncryptionKeyUser4,
await SEA.secret(user1.epub, user4)
);
// Each user decrypts the encrypted message using the decrypted encryption key
const decryptedMessageUser2 = await SEA.decrypt(encryptedMessage, decryptedEncryptionKeyUser2);
const decryptedMessageUser3 = await SEA.decrypt(encryptedMessage, decryptedEncryptionKeyUser3);
const decryptedMessageUser4 = await SEA.decrypt(encryptedMessage, decryptedEncryptionKeyUser4);
});
关于javascript - GunDB SEA 让其他用户写入用户空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72070113/
我如何停止由 gun('something').on() 为 gundb 处理程序(取消订阅)触发的事件,以便停止更新列表或更改列表。 最佳答案 在 0.5 及更高版本中,您只需调用 .off()。
我需要在用户空间中交换私有(private)数据。 因为 gun.grant 和 gun.trust 已弃用,所以我遵循了以下示例: https://gun.eco/docs/SEA#quicksta
我需要在用户空间中交换私有(private)数据。 因为 gun.grant 和 gun.trust 已弃用,所以我遵循了以下示例: https://gun.eco/docs/SEA#quicksta
GunDB 基础/存储 + Superpeer 嗨伙计, 我在 GunDB 的第四天探索并在阅读文档和其他各种教程时,目前还不确定一件事:存储以及我是否需要 Superpeer? 尚未找到使用 Gun
我已经开始使用 GunDB,并且非常喜欢它。我可以轻松创建复杂的关系,而不会遇到与关系数据库或文档数据库相关的许多问题。 不幸的是,我遇到了一个看似简单的问题。 我已成功创建节点,但稍后想要获取 ke
据我了解,这两个数据库似乎遵循几乎相同的原则。两者都支持离线场景,都是去中心化的,并且具有灵活的数据模型。我看到的唯一真正区别是 noms 实现了 git 的一些想法,并允许自定义 merge 操作,
我刚刚发现了 gunDB,这个概念似乎很有趣,我想在开始进一步评估之前了解更多关于它的信息。 如果我想像教程一样构建一个聊天应用程序,但要实现聊天 房间 .有没有办法让客户只“订阅”某些聊天室,而避免
我可以使用 JWT使用 gundb 进行身份验证?如果是这样,它会大大减慢我的同步速度吗?我打算尝试使用教程 here 进行测试。但想看看是否有任何我应该注意的“陷阱”。 最佳答案 API 已更改为使
我在 node.js 中试用了 gundb。调用get两次后调用一次会报错。我在 Node 控制台中执行了以下操作: var Gun = require("gun/gun"); var gundb =
我看到示例引用了 GunDB 的 S3 存储驱动程序的一些参数。看起来像这样: var Gun = require('gun'); var gun = Gun({ file: 'data.js
我是一名优秀的程序员,十分优秀!