mssqlデータベースを使用するnodejsアプリケーションから始めました。私は暗号化/復号化の目的のために、データベースに格納されている暗号化されたキーを持っているので、何かを暗号化/復号化するたびに、この値を取得し、データベースコールのコールバックで解読し、関数私はこの値を使って暗号化関数に渡します。Nodejs - アプリケーションでデータベースから値を取得して、将来使用するため
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;
私が欲しいのは、実際に起動するアプリケーションのデータベースからそれを得るために、どこでも利用できるように、変数のどこか(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;
ので、ワークフローは次のようになります。
- 開始は、アプリケーション
- がデータベースにこの非同期呼び出しを行うnodejs 、このキーを取得し、それを解読し、機能に
を暗号化するために、さらに呼び出しでそれを使用
Encrypt(inputData、decryptedKey)関数でdecryptedKeyを使用する前にdecryptedKeyが確実に初期化されるとは限りません。
私は何ができるのは、(角に、app.runは)(あり)のようなnodejsで何かがあります:
application.start() {
// do some logic before all other actions
}
あなたが意味: 'application.listen(ポート、関数(){ SQL:クエリ( "キーを取得するクエリ"、[パラメータ]、 機能(データ){ を});'。 [OK]を、グローバルレベルで取得した値を保存することができます。プロジェクト内のヘルパー、ルート、およびその他のファイルで利用できるように、このリッスン機能の外で利用できます。 – frnfla
なぜあなたも保存していますサーバーが起動するたびにデータベースを取得する必要がある場合は、データベースの値を変更する必要がありますか? –
を設定ファイルに保存しないでください。彼の鍵はデータベースで暗号化されています。確かに、私はそれもconfigに保存されることを願った。私が問題に言及したように、私はdbから取得し、すべての暗号化/復号化コールでそれを復号化するソリューションを持っています。そして、今は「地獄のコールバック」があるように悪い習慣に思えます。私がアプリの起動時に一度だけ行うことができれば、dbの呼び出しとキーの解読に関するこれらの2つのコールバックを取り除くだろう。 – frnfla