[DBMoto]暗号化したデータを復号し保存するデータ連携方法


こちらの記事では、データを暗号化しレプリケーションする方法をご紹介しました。本記事では、この暗号化したデータを復号してデータ連携を行う手法を3ステップでご紹介します。手順1. 復号関数の作成

暗号化によるレプリケーションを紹介した時と同様に、DBMotoのグローバルスクリプトに復号を行うDecrypt関数を設定します。下記はAES方式の復号を行う関数を実装するスクリプトです。

using System;
using System.Data;
using DBMotoPublic;
using DBMotoScript;

using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace DBRS{

 public class GlobalScript : IGlobalScript{
  public static string Decrypt(string cipher, string iv, string key){
   using (RijndaelManaged myRijndael = new RijndaelManaged()){
    myRijndael.BlockSize = 128;
    myRijndael.KeySize = 128;
    myRijndael.IV = Encoding.UTF8.GetBytes(iv);
    myRijndael.Key = Encoding.UTF8.GetBytes(key);

    ICryptoTransform decryptor = myRijndael.CreateDecryptor(myRijndael.Key, myRijndael.IV);

    string plain = string.Empty;
    using (MemoryStream mStream = new MemoryStream(System.Convert.FromBase64String(cipher))){
     using (CryptoStream ctStream = new CryptoStream(mStream, decryptor, CryptoStreamMode.Read)){
      using (StreamReader sr = new StreamReader(ctStream)){
       plain = sr.ReadLine();
      }
     }
    }
    return plain;
   }
  }
 } 
}

手順2. マッピングの設定

レプリケーションを作成する際のマッピング設定にて、グローバルスクリプトに記載したDecrypt関数を使用するよう設定します。

もし、シンクロナイゼーションのレプリケーションモードで、複製先から複製元への逆方向の転送時に関数を設定したい場合には、下記画像の赤枠のアイコンをクリックします。これにより逆方向のマッピングが設定できます。

手順3. レプリケーションの実行

関数を設定したレプリケーションを実行します。Decrypt関数を設定したカラムのデータが複製先テーブルで復号されていることが確認できます。

このように関数を使用することで、暗号化されたデータを復号しデータベースに保存することが可能です。また、双方向差分転送モードのシンクロナイゼーションを利用することで、複製元では平文でデータを、複製先では暗号化したデータを保存するような運用も可能です。個人情報や大切なデータを保管したデータベースのデータ移行や連携等で、ぜひDBMotoをご検討ください。

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください