2015-08-08 3 views
-1

Я новичок в nodejs, парусах и должен зашифровать некоторые данные перед их хранением в базе данных.Ошибка дешифрования с использованием simplecrypt

Я нашел модуль simplecrypt

И сделали этот код демо.

var simplecrypt = require("simplecrypt"); 

var sc = simplecrypt(); 
var digest = sc.encrypt("my secret"); 
console.log(digest); // "66cea6eb1c18b8862485cf0604fa6062" 

var message = sc.decrypt(digest); 
console.log(message); // "my secret" 

Это делает зашифровать значение, но при попытке расшифровать я получаю ошибку:

crypto.js:202 
    var ret = this._handle.final(); 
         ^
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt 
    at Error (native) 
    at Decipher.Cipher.final (crypto.js:202:26) 

Может кто-нибудь предложить способ для меня, чтобы правильно расшифровать мое зашифрованное значение?

+0

Я копировал/вставлял этот код в свой редактор и смог запустить его успешно. (без парусов) – dannypaz

+1

Ошибка, которую вы получаете, означает, что ключ, который вы передали в sc.decrypt, является недопустимым/неправильным. – dannypaz

+0

Спасибо danypaz, какой ключ я могу передать sc.decrypt? Эта ошибка появляется, когда я шифрую user.password в функции в Model User.js beforeCreate: function (user, cb) { user.password = sc.encrypt (user.password) ;; cb(); }, а затем в файле passport.js i decrpt var passdecrpt = sc.decrypt (user.password); после этого я сравниваю пароль, который я ввожу и passdecrpt – angel

ответ

0

После провести весь день для проверки, я foud из результата. я должен определить

var user1 ={ 
    method:methodinput, 
    password:passwordinput, 
    salt:saltinput 
}; 

и присвоить значения получают от mydabase к user1 и объявить

var sc = simplecrypt(user1); 
var passEncrypt = sc.encrypt(passworduserinput); 

затем сравнить user.password с passEncrypt.

0

С вашего комментария @angel, я думаю, я понимаю, где ваша проблема. decrypt() принимает хэш строки, а не сам String (user.password).

var simplecrypt = require("simplecrypt"); 
var sc = simplecrypt(); 

var user = { 
    password: "password123" 
}; 

var myHash = sc.encrypt(user.password); 

// myHash returns a hash of user.password 

console.log(myHash); // "66cea6eb1c18b8862485cf0604fa6062" 

// This next state 
// You will need to pass the created hash into decrypt 
var message = sc.decrypt("66cea6eb1c18b8862485cf0604fa6062"); 
console.log(message); // "password123" 

Если вы пытаетесь проверить, что пользователь вошел в систему (предполагается, что это из user.password), вы хотите сравнить пароль с сохраненным хэш из базы данных.

// Here is a simple example for a login screen 
// (Not for use in production) 
var simplecrypt = require("simplecrypt"); 
var sc = simplecrypt(); 

var user = { 
    password: "password123" 
}; 

// This would be stored in the DB 
var databaseHash = sc.encrypt(user.password); 

// Here is your login function 
// 
// Now when the user logs in, you will compare the two 
// and see if the credentials match 
var userInput = sc.encrypt(user.password); 
var usersPasswordFromDatabase = databaseHash; 

if (userInput === usersPasswordFromDatabase){ 
    // Logged In! 
    console.log('Logged In!'); 
}else { 
    console.log('Invalid Username/Password'); 
} 

пример будет возвращен «Записан В»

+0

Привет, danypaz. Проблема была в значении, которое я передал в decrypt(), это хеш, и я обнаружил его в моей базе данных. Я не знаю, почему значение получает из db, что делает ошибку. – angel

+0

Ваш пример не будет работать, когда база данныхHast получает от базы данных, и она есть. Я пытаюсь сравнить пароль, который я вводил с базой данныхHast, но они не равны. var userInput = sc.encrypt (user.password); var usersPasswordFromDatabase = databaseHash; if (userInput === usersPasswordFromDatabase) { // Записан! } else { // Неверный пользователь/пароль. } – angel

+0

У меня была опечатка в моем примере (user1 вместо пользователя). – dannypaz

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