Как зашифровать базу данных pouchdb

Предыстория:

Я пытаюсь зашифровать базу данных pouchdb с помощью библиотеки crypto-pouch. Я просмотрел пример, показанный на 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>

Но мой код не видит никакого шифрования введенных данных, или я не вижу сгенерированного открытого ключа.

Любая подсказка, как я должен использовать библиотеку crypto-pouch с pouchdb.


person user1455719    schedule 02.03.2016    source источник
comment
Я не очень много знаю об этой библиотеке, но, похоже, она ведет себя так, как вы говорите. Я подозреваю, что он, вероятно, расшифровывает его на выходе, но я не уверен. По этой причине я создал эту проблему GitHub: github.com/calvinmetcalf/crypto-pouch/issues. /21   -  person JustGage    schedule 09.03.2016


Ответы (2)


Изменить: этот ответ изначально относился к версии 1.x криптопакета, но неверен для текущей версии (3.x), в текущей версии db.crypto(password) не возвращает обещаем, что обновленные примеры кода

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);
})

Исходный ответ (по-прежнему действителен для версии 1.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);
})
person Calvin    schedule 09.03.2016
comment
Привет, Кэлвин, я ожидал получить значение publicKey в следующем коде /*Start*/ db.crypto(password).then(function (publicKey) { console.log(publicKey); }); /*-- End--*/ Но мне кажется, что значение 'publicKey' не определено... почему?. - person user1455719; 11.03.2016
comment
1) Текущий URL 'wzrd.in/standalone/crypto-pouch' дает мне javascript файл, который импортирует зависимости с помощью nodejs 'require'. Если я скопирую этот файл javascript в свой проект (который представляет собой обычную страницу angularjs), он жалуется на «требование» nodejs. Что я должен сделать, чтобы использовать вашу библиотеку в моем проекте. Я не могу сослаться на ваш URL ('wzrd.in/standalone/crypto-pouch') из моего проекта, поскольку он предназначен для работы в среде интрасети без подключения к Интернету. - person user1455719; 11.03.2016
comment
по порядку 1. материал publicKey был для функции с ключами Диффи-Хеллмана, которые я удаляю, игнорируйте это, он также не будет применяться только с использованием пароля 2. требования работают в этом файле не так, они используются внутренне для объединения, но не требует подключения к Интернету - person Calvin; 11.03.2016

Я попробовал 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 (Typescript)

import PouchDB from 'pouchdb-browser';

...
 this.db = new PouchDB('myProjectDB');
 this.db.setPassword(environment.dbPassword);

person Jeffrey Nicholson Carré    schedule 03.11.2019