ファイル
3
ファイルの暗号化・復号化を行いたい
3
ファイルの暗号化はEncryptorクラス、復号化はDecryptorクラスで実現可能です。
暗号化を行う場合、Encryptorクラスのコンストラクタでデータ出力先のオブジェクトを指定し、WriteStringメソッドで暗号化したデータを書き込みます。
Encryptorコンストラクタの第3引数で、以下いずれかの暗号化アルゴリズムの種類を指定します。
定数
内容
Encryptor.CALG_BLOWFISH
BlowFish
Encryptor.CALG_BLOWFISH2
BlowFish(Raw Mode)
Encryptor.CALG_BLOWFISH3
BlowFish(PKCS#5パディング)
データの復号化を行う場合は、Decryptorクラスのコンストラクタでデータ入力元のオブジェクトを指定し、Readメソッドで復号化したデータを読み込みます。
Decryptorコンストラクタの第2引数で指定するパスワード、第3引数で指定するアルゴリズムは、暗号化(Encryptorクラスのコンストラクタ)で設定した内容を指定します。
下記のサンプルでは、ログインIDとパスワードに値を入力し、ログインボタンの押下でForm1画面に遷移する際、入力内容が暗号化された状態でテキストファイル(login.txt)に出力されます。
再度frmlogin.crsを起動すると、保存されたテキストファイル(login.txt)を復号化して読み込み、ログインIDとパスワードがテキストボックスに設定されます。
ログイン情報を登録・変更したい場合は、ログイン情報登録ボタンを押下することでテキストファイル(login.txt)が更新されます。 サンプルでは書き込みモード(FileSystem.OPEN_WRITE)でファイルを開いているため、既存の内容は破棄されて新しい情報に上書き保存されます。
[ frmlogin.crs ]
Form frmlogin { Width = 436; Height = 270; /* ログイン情報を保存するためのファイル */ String fileNm = "login.txt"; /* パスワード */ String filePw = "pass"; /* 前回のログイン情報 */ Array bk_info; /* ログイン情報存在フラグ(0:なし、1:あり) */ Number flg; TextBox TextBox1 { X = 124; Y = 30; Width = 253; Height = 35; /* 半角数字・半角英字が入力対象 */ InputMode = $NUMERIC + $ALPHA + $EXSPACE; } TextBox TextBox2 { X = 124; Y = 89; Width = 253; Height = 35; /* 半角数字・半角英字が入力対象 */ InputMode = $NUMERIC + $ALPHA + $EXSPACE; /* マスク表示の有効化 */ Password = $True; } Label Label1 { X = 40; Y = 30; Width = 83; Height = 34; Value = "ID"; FontSize = 12; FontFace = $BOLD; HorizontalAlign = $CENTER; VerticalAlign = $CENTER; } Label Label2 { X = 37; Y = 90; Width = 86; Height = 34; Value = "パスワード"; FontSize = 12; FontFace = $BOLD; HorizontalAlign = $CENTER; VerticalAlign = $CENTER; } Button Button1 { X = 17; Y = 200; Width = 153; Height = 34; Title = "ログイン情報登録"; Function OnTouch( e ) { var txtid = ^.TextBox1.Value; var txtpw = ^.TextBox2.Value; /* 入力チェック */ if((txtid != "") && (txtpw != "")){ /* 両方とも入力されていたら先に進む */ }else{ //.MessageBox("IDとパスワードを入力してください","入力エラー"); ^.TextBox1.SetFocus(); return; } if(//.MessageBox("IDとパスワードを登録しますか?","確認",$YESNO) == NoSelected){ return; } /* 入力した情報を変数に退避 */ ^.bk_info[0] = txtid; ^.bk_info[1] = txtpw; /* ログイン情報をファイルへ更新(暗号化) */ ^.FileEncryption(txtid, txtpw); /* 判定フラグ更新 */ ^.flg = 1; //.MessageBox("ログイン情報を登録しました","登録完了"); } } Button Button2 { X = 247; Y = 200; Width = 153; Height = 34; Title = "ログイン"; Function OnTouch( e ) { var txtid = ^.TextBox1.Value; var txtpw = ^.TextBox2.Value; /* 入力チェック */ if((txtid != "") && (txtpw != "")){ /* 両方とも入力されていたら先に進む */ }else{ //.MessageBox("IDとパスワードを入力してください","入力エラー"); ^.TextBox1.SetFocus(); return; } /* 保存されているログイン情報と比較 */ if((txtid != ^.bk_info[0]) || (txtpw != ^.bk_info[1])){ if(^.flg == 1){ //.MessageBox("IDとパスワードが異なります","入力エラー"); ^.TextBox1.SetFocus(); return; } /* ログイン情報用のテキストファイルがない場合は先に進む */ } /* Encryptorオブジェクトの初期化 */ /* ファイル暗号化 */ ^.FileEncryption(txtid, txtpw); /* サンプル画面に遷移 */ frmlogin.Delete(); //.Get("Form1.crs"); } } /* ファイル暗号化 */ Function FileEncryption(txtid, txtpw){ var fs = new FileSystem; /* ファイルを開く */ var f = fs.Open(fileNm, FileSystem.OPEN_WRITE); /* Encryptorオブジェクトの初期化 */ var enc = new Encryptor(f, filePw, Encryptor.CALG_BLOWFISH); /* ファイルへデータを書き込む */ enc.WriteString(txtid + " " + txtpw); /* ファイルをクローズ */ enc.Close(TRUE); } /* ファイル復号化 */ Function FileDecryption(){ var fs = new FileSystem; /* ファイルを開く */ var f = fs.Open(fileNm, FileSystem.OPEN_READ); /* Decryptorオブジェクトの初期化 */ var dec = new Decryptor(f, filePw, Decryptor.CALG_BLOWFISH); /* ファイルからデータを読込 */ var txtdata = dec.Read(); var loginInfo = new Array(2); loginInfo[0] = split(txtdata, " ", 0); loginInfo[1] = split(txtdata, " ", 1); /* ファイルをクローズ */ dec.Close(TRUE); return loginInfo; } if ( !$DESIGNTIME ) { /* 前回のログイン情報があれば入力項目に表示する */ var fs = new FileSystem; var path = "/" + fileNm; if (fs.Exists(path)) { /* ファイル復号化 */ var info = new Array[2]; info = this.FileDecryption(); /* ログイン情報を入力項目に設定 */ TextBox1.Value = info[0]; TextBox2.Value = info[1]; /* 前回情報分は変数に退避 */ bk_info[0] = info[0]; bk_info[1] = info[1]; /* 判定フラグ更新 */ flg = 1; } else { /* ログイン情報がない場合 */ /* 判定フラグ更新 */ flg = 0; } } }
[ Form1.crs ]
Form Form1 { Width = 381; Height = 278; Label Label1 { X = 35; Y = 25; Width = 303; Height = 46; Value = "Formサンプル画面1"; VerticalAlign = $CENTER; HorizontalAlign = $CENTER; FontFace = $BOLD; FontSize = 14; BgColor = $FFCCFF; } EditBox EditBox1 { X = 42; Y = 96; Width = 289; Height = 111; Value = "ログインできるか確認するための画面です。"; } if ( !$DESIGNTIME ) { /* ここに初期化処理を記述してください */ } }
管理番号:FileSd_003
Biz-Collections Bizの宝箱 トップへ
Biz/Browser HT・Biz/Browser SmartDevice・Biz/Browser AI TIPS集 トップへ