Ich begann mit Nodejs-Anwendung, die MSSQL-Datenbank verwendet. Zur Verschlüsselung/Entschlüsselung habe ich einen verschlüsselten Schlüssel, der in der Datenbank gespeichert ist, also muss ich jedes Mal, wenn ich etwas entschlüssele, zuerst einen Datenbankaufruf machen, diesen im Callback des Datenbankaufrufs entschlüsseln und dann in einem anderen Callback entschlüsseln Funktion Ich verwende diesen Wert, um ihn an die Verschlüsselungsfunktion zu übergeben.Nodejs - Wert aus der Datenbank beim Start der Anwendung für die zukünftige Verwendung
sql.query("query to get key", [parameters],
function (data) {
if (data && (data.length == 1)) {
Decrypt(data[0].Key, iv, salt, function (data) {
var decryptedKey = data;
Encrypt(inputData, decryptedKey, function (data){
var encryptedData = data;
Was ich will, ist „aus der Datenbank erhalten Schlüssel und entschlüsselt“ bewegen Logik auf einem anderen Ort, eigentlich ist es auf Anwendung von Datenbank zu bekommen starten und speichern Sie es irgendwo in den Variablen überall verfügbar zu sein (decryptedKey):
sql.query("query to get key", [parameters],
function (data) {
if (data && (data.length == 1)) {
AESDecrypt(data[0].Key, iv, salt, function (data) {
var decryptedKey = data;
So soll, Workflow sein:
- Start NodeJS Anwendung
- diesen asynchronen Anruf zur Datenbank erhalten, diesen Schlüssel, entschlüsseln und speichern sie in einer globalen Variable
- es in weiteren Anrufe verwenden Funktion
ich schon bewegen sie in separaten, Helfer-Datei versucht, und sind in der Datei diese Hilfsdatei nur zu verschlüsseln, wo Verschlüsselung/Entschlüsselungslogik befindet sich, aber das Wort "asynchron" ist, was Verwirrung verursacht. Es liest Helfer, macht Verschlüsselung/Entschlüsselung aber kann nicht sicher sein, dass dieser Helfer initialisiert und KEY-Wert zurückgegeben hat, bevor Verschlüsselungslogik ihn verwendet, da es asynchron ist. So erhalte ich Fehlermeldungen in der Konsole über „nicht behandelte Versprechen, versprechen Ablehnungen“ usw.
Es stellt nicht sicher, dass decryptedKey vor Encrypt (EingDaten, decryptedKey) initialisiert wird Funktion nutzt.
Was kann ich tun, es ist etwas in NodeJS wie (in Angular, werde app.run()):
application.start() {
// do some logic before all other actions
}
Sie bedeuten:.. 'application.listen (Port, function() { sql.query ("Abfrageschlüssel zu bekommen", [Parameter], Funktion (Daten) { });' wo Anwendung ist Express-Instanz? Ok, wie kann ich abgerufenen Wert auf globaler Ebene, um außerhalb dieser Funktion zu hören, verfügbar für Helfer, Routen und andere Dateien in Projekt usw. – frnfla
Warum speichern Sie sogar der Wert in der Datenbank, wenn Sie es jedes Mal abrufen müssen, wenn der Server startet? Warum nicht in irgendeiner Konfigurationsdatei? –
Weil das Nachfrage ist sein Schlüssel in der Datenbank verschlüsselt. Glauben Sie, ich wünschte, es wäre auch in der Konfig gespeichert. Wie ich in Frage erwähnt habe, habe ich eine Lösung, die aus db abruft und sie bei jedem Ver-/Entschlüsselungs-Aufruf entschlüsselt, und es scheint so schlecht zu sein, dass ich jetzt "höllische Rückrufe" habe. Wenn ich es nur einmal beim Start der App tun könnte, würde ich diese beiden Callbacks bezüglich des Aufrufs von db und der Entschlüsselung des Schlüssels loswerden. – frnfla