Проблема в соли и способе использования bcrypt.Вы используете saltRounds для генерации новой соли (случайное значение), поэтому хеш всегда будет другим.Если использовать фиксированное значение соли, хеш будет таким же.См. Пример ниже:
const bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';
const someOtherPlaintextPassword = 'not_bacon';
bcrypt.genSalt(saltRounds, function(err, salt) {
console.log('new salt:%s',salt);
bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
// Store hash in your password DB.
console.log('new hash:%s',hash);
});
})
//first time generated values were below, but each run will generate new values:
//salt:$2b$10$X4kv7j5ZcG39WgogSl16au
//hash:$2b$10$X4kv7j5ZcG39WgogSl16aupL0..j8Fmm8Lwgq92uWuM5KyXhE6tpO
//Generate the same hash value as fixed salt value is used
salt = '$2b$10$X4kv7j5ZcG39WgogSl16au'
bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
console.log('same value:%s', hash); //hash:$2b$10$X4kv7j5ZcG39WgogSl16aupL0..j8Fmm8Lwgq92uWuM5KyXhE6tpO
});
// Test comparison
hash='$2b$10$X4kv7j5ZcG39WgogSl16aupL0..j8Fmm8Lwgq92uWuM5KyXhE6tpO' //first hash of myPlaintextPassword
bcrypt.compare(myPlaintextPassword, hash, function(err, res) {
console.log('Test using the correct password/key - should authenticate');
if (res === true) {
console.log('authenticated ');
} else {
console.log('NOT authenticated');
}
});
bcrypt.compare(someOtherPlaintextPassword, hash, function(err, res) {
console.log('Test using an incorrect password/key - should fail authentication');
if (res === true) {
console.log('authenticated');
} else {
console.log('NOT authenticated');
}
});
Возможно, использовать какое-то другое значение в качестве первичного ключа (номер лицензии) и некоторое зашифрованное значение, чтобы указать, является ли это действительной лицензией.