如何加密 pouchdb 数据库
How to encrypt a pouchdb database
背景:
我正在尝试使用 crypto-pouch 库加密 pouchdb 数据库。
我查看了 https://github.com/calvinmetcalf/crypto-pouch 中显示的示例
但它似乎对我没有任何作用。
我的代码:
<!DOCTYPE html>
<html ng-app="pouchdbApp">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="pouchdbDemo.js"></script>
<script src="http://cdn.jsdelivr.net/pouchdb/5.2.1/pouchdb.min.js"></script>
<!-- <script src="crypto-pouch-master/bundle.js"></script> -->
<script src="http://wzrd.in/standalone/crypto-pouch"></script>
<script>
var db = new PouchDB('kittens2');
var password = "mypassword";
db.crypto(password).then(function (publicKey) {
console.log("publicKey");
console.log(publicKey);
});
/* db.removeCrypto(); */
var doc = {
"_id": "mittens",
"name": "Mittens",
"occupation": "kitten",
"age": 3,
"hobbies": [
"playing with balls of yarn",
"chasing laser pointers",
"lookin' hella cute"
]
};
db.put(doc);
db.get('mittens').then(function (doc) {
console.log(doc);
});
</script>
</head>
<body>
</body>
</html>
但是我的代码没有看到对输入的数据进行任何加密,或者我看不到任何生成的 public 密钥。
任何关于我应该如何将加密袋库与 pouchdb 一起使用的线索。
编辑:这个答案最初是指版本 1.x 的 crypto pouch,但对于当前版本 (3.x) 是不正确的,在当前版本 db.crypto(密码)没有 return 承诺,因此更新的代码示例是
db.crypto(password)
// <-- encryption set up
和
db.crypto(password);
db.put({_id: 'foo', bar: 'baz'}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('decrypted', doc);
return db.removeCrypto();
}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('encrypted', doc);
})
原回答(对v1.x仍然有效)如下:
所以文档有点混乱(我刚刚清理过)但是当你调用 db.crypto 它包装数据库以便文档透明地加密和解密
db.crypto(password).then(function () {
// <-- encryption set up
})
它会透明地加密您创建的文档和解密您阅读的文档,直到您调用
db.removeCrypto();
所以如果你想测试做一些像
db.crypto(password).then(function () {
return db.put({_id: 'foo', bar: 'baz'});
}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('decrypted', doc);
return db.removeCrypto();
}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('encrypted', doc);
})
我尝试了 combDB,它是目前唯一一个似乎可以与新的 nodeJS 一起使用的方法
const PouchDB = require('pouchdb')
PouchDB.plugin(require('comdb'))
const password = 'extremely secure value'
const db = new PouchDB(POUCH_PATH)
db.setPassword(password)
db.post({
_id: 'gay-agenda',
type: 'queerspiracy',
agenda: ['be gay', 'do crimes']
}).then(() => {
// now replicate to a couchdb instance
return db.replicate.to(`${COUCH_URL}/FALGSC`)
})
或使用 Angular(打字稿)
import PouchDB from 'pouchdb-browser';
...
this.db = new PouchDB('myProjectDB');
this.db.setPassword(environment.dbPassword);
背景:
我正在尝试使用 crypto-pouch 库加密 pouchdb 数据库。 我查看了 https://github.com/calvinmetcalf/crypto-pouch 中显示的示例 但它似乎对我没有任何作用。
我的代码:
<!DOCTYPE html>
<html ng-app="pouchdbApp">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script src="pouchdbDemo.js"></script>
<script src="http://cdn.jsdelivr.net/pouchdb/5.2.1/pouchdb.min.js"></script>
<!-- <script src="crypto-pouch-master/bundle.js"></script> -->
<script src="http://wzrd.in/standalone/crypto-pouch"></script>
<script>
var db = new PouchDB('kittens2');
var password = "mypassword";
db.crypto(password).then(function (publicKey) {
console.log("publicKey");
console.log(publicKey);
});
/* db.removeCrypto(); */
var doc = {
"_id": "mittens",
"name": "Mittens",
"occupation": "kitten",
"age": 3,
"hobbies": [
"playing with balls of yarn",
"chasing laser pointers",
"lookin' hella cute"
]
};
db.put(doc);
db.get('mittens').then(function (doc) {
console.log(doc);
});
</script>
</head>
<body>
</body>
</html>
但是我的代码没有看到对输入的数据进行任何加密,或者我看不到任何生成的 public 密钥。
任何关于我应该如何将加密袋库与 pouchdb 一起使用的线索。
编辑:这个答案最初是指版本 1.x 的 crypto pouch,但对于当前版本 (3.x) 是不正确的,在当前版本 db.crypto(密码)没有 return 承诺,因此更新的代码示例是
db.crypto(password)
// <-- encryption set up
和
db.crypto(password);
db.put({_id: 'foo', bar: 'baz'}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('decrypted', doc);
return db.removeCrypto();
}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('encrypted', doc);
})
原回答(对v1.x仍然有效)如下:
所以文档有点混乱(我刚刚清理过)但是当你调用 db.crypto 它包装数据库以便文档透明地加密和解密
db.crypto(password).then(function () {
// <-- encryption set up
})
它会透明地加密您创建的文档和解密您阅读的文档,直到您调用
db.removeCrypto();
所以如果你想测试做一些像
db.crypto(password).then(function () {
return db.put({_id: 'foo', bar: 'baz'});
}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('decrypted', doc);
return db.removeCrypto();
}).then(function () {
return db.get('foo');
}).then(function (doc) {
console.log('encrypted', doc);
})
我尝试了 combDB,它是目前唯一一个似乎可以与新的 nodeJS 一起使用的方法
const PouchDB = require('pouchdb')
PouchDB.plugin(require('comdb'))
const password = 'extremely secure value'
const db = new PouchDB(POUCH_PATH)
db.setPassword(password)
db.post({
_id: 'gay-agenda',
type: 'queerspiracy',
agenda: ['be gay', 'do crimes']
}).then(() => {
// now replicate to a couchdb instance
return db.replicate.to(`${COUCH_URL}/FALGSC`)
})
或使用 Angular(打字稿)
import PouchDB from 'pouchdb-browser';
...
this.db = new PouchDB('myProjectDB');
this.db.setPassword(environment.dbPassword);