2016-03-02 3 views
4

Справочная информация:Как зашифровать базу данных, pouchdb

Я пытаюсь зашифровать базу данных 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"); 
 
    \t  console.log(publicKey); 
 
     }); 
 
    
 
     /* db.removeCrypto(); */ 
 

 
     var doc = { 
 
\t \t "_id": "mittens", 
 
\t \t "name": "Mittens", 
 
\t \t "occupation": "kitten", 
 
\t \t "age": 3, 
 
\t \t "hobbies": [ 
 
\t \t  "playing with balls of yarn", 
 
\t \t  "chasing laser pointers", 
 
\t \t  "lookin' hella cute" 
 
    \t \t ] 
 
\t \t }; 
 
     
 
     db.put(doc); 
 

 
     db.get('mittens').then(function (doc) { 
 
     console.log(doc); 
 
     }); 
 

 
    </script> 
 

 
</head> 
 
<body> 
 

 
</body> 
 

 
</html>

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

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

+0

я не знаю пойдите в эту библиотеку очень, но, похоже, это поведение вы говорите. Я подозреваю, что это, вероятно, unencryping это на выходе, но я не уверен. По этой причине я создал эту проблему GitHub: https://github.com/calvinmetcalf/crypto-pouch/issues/21 – JustGage

ответ

2

Редактировать: этот ответ первоначально ссылался на версию 1.x crypto-мешочка, но не соответствует текущей версии (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); 
}) 

Оригинальный ответ (по-прежнему действует для 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); 
}) 
+0

Привет, Calvin, я ожидал, что значение publicKey предоставлено мне в следующем коде/* Start */db. crypto (password). then (function (publicKey) { console.log (publicKey); });/* - End - */Но, похоже, это дает мне неопределенное значение для значения publicKey .. почему? – user1455719

+0

1) Текущий url 'http://wzrd.in/standalone/crypto-pouch' дает мне javascript-файл, который импортирует зависимости, используя nodejs 'require'. Если я скопирую этот файл javascript в свой проект (который является простой страницей angularjs), он жалуется на требование nodejs. Что делать, чтобы использовать вашу библиотеку в рамках моего проекта. Я не могу ссылаться на ваш url ('http://wzrd.in/standalone/crypto-pouch') из моего проекта, поскольку он предназначен для работы в среде интрасети без подключения к Интернету. – user1455719

+0

на заказ 1. материал publicKey был для функции с ключами diffie-hellman, которые я удаляю, игнорируя это, он также не будет применяться с использованием только пароля 2.это не то, как требуется работа в этом файле, они используются внутри для объединения, но не связаны с подключением к Интернету – Calvin

Смежные вопросы