|   | 
 
|  
 .NET TIPS 
ファイルをNTFSの機能で暗号化/復号するには?[2.0のみ、C#、VB]
デジタルアドバンテージ 一色 政彦 
2007/02/02 | 
  | 
 
 
 
 | 
 Windows OSには9x系(具体的には、Windows 98/98SE/Meなど)とNT系(Windows 2000/XP/2003 Server/Vista)の2種類の系統がある(※9x系のOSは今後登場しない)。このうちNT系では、「NTFS」(NT File System)と呼ばれるファイル・システムが採用されており、セキュリティ機能などが充実している。
 そのNTFSの機能の1つに「ファイルやフォルダの暗号化」(EFS:Encrypting File System)がある(※Windows 2000以降のNTFS)。この機能について詳しくは「Windows TIPS:ファイルやフォルダを暗号化する方法」を参照してほしいが、簡単に説明すると、ファイルを読み書きできるユーザーを制限するための機能だ。この機能によってファイルやフォルダを暗号化しておけば、例えばノート・パソコンが盗まれてしまったような場合でも、第三者がそのファイルに記載された情報を読み出すことはできない。
 .NET Framework 2.0では、ファイルに対してこのような暗号化(Encrypt)および復号(Decrypt)を行うためのメソッドが追加されている(※ただしフォルダに対して暗号化/復号を行うメソッドは提供されていないようだ)。
ファイルを暗号化/復号する(File.Encryptメソッド/File.Decryptメソッド)
 ファイルを暗号化するための方法は2種類ある。最も簡単な方法は、Fileクラス(System.IO名前空間)の静的メソッドEncryptを使う方法だ。このEncryptメソッドは、パラメータで指定されたファイルの暗号化を行う。
 次のコードは実際にファイルを暗号化するサンプル・プログラムである。
 
using System; 
using System.IO; 
 
class Program 
{ 
  static void Main() 
  { 
    string path = @"C:\fdotnet\sample.txt"; 
    File.Encrypt(path); 
  } 
}
 | 
 
 
 
Imports System.IO 
 
Module Module1 
 
  Sub Main() 
    Dim path As String = "C:\fdotnet\sample.txt" 
    File.Encrypt(path) 
  End Sub 
 
End Module
 | 
 
 
 | 
 
| File.Encryptメソッドでファイルを暗号化する例(上:C#、下:VB) | 
 このサンプル・プログラムによってファイルを暗号化した後、例えばいったんWindowsをログオフして別ユーザーでログオンし直し、そのファイルを開こうとすると、次の画面のようにエラーとなり開くことができない。
 
  | 
  | 
  | 
 
| 暗号化されたファイルを別ユーザーで開いた際のエラー | 
 
| 暗号化されたファイルはエクスプローラで表示するとファイル名が緑色で表示され、属性に「E」(=Encrypt)が表示される。このようなファイルを別のログオン・ユーザー(=暗号化を行ったユーザー以外)で開こうとすると、アクセス拒否のエラーになる。暗号化を行ったログオン・ユーザーで開けば、通常どおり開ける。 | 
 暗号化したファイルを通常の状態に戻す(=復号する)のも簡単だ。File.Decryptメソッドを呼び出すだけである(先ほどのサンプル・プログラムの「Encrypt」という記述を「Decrypt」に修正するだけ)。
ファイルを暗号化/復号する(FileInfo.Encryptメソッド/FileInfo.Decryptメソッド)
 まったく同様の処理を、FileInfoクラス(System.IO名前空間)のインスタンス・メソッドEncryptを用いても行うことができる。だがこのEncryptメソッドはパラメータを取らない。その代わりに、FileInfoクラスをインスタンス化する際のコンストラクタのパラメータに、ファイル・パスを指定する必要がある。
 次のコードはFileInfoクラスによってファイルを暗号化するサンプル・プログラムである。
 
using System; 
using System.IO; 
 
class Program 
{ 
  static void Main() 
  { 
    string path = @"C:\fdotnet\sample.txt"; 
    FileInfo fi = new FileInfo(path); 
    fi.Encrypt(); 
  } 
}
 | 
 
 
 
Imports System.IO 
 
Module Module1 
 
  Sub Main() 
    Dim path As String = "C:\fdotnet\sample.txt" 
    Dim fi As New FileInfo(path) 
    fi.Encrypt() 
  End Sub 
 
End Module
 | 
 
 
 | 
 
| FileInfo.Encryptメソッドでファイルを暗号化する例(上:C#、下:VB) | 
 復号したい場合は、FileInfoクラスのインスタンス・メソッドDecryptを呼び出せばよい。
 
利用可能バージョン:.NET Framework 2.0のみ 
カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル 
使用ライブラリ:Fileクラス(System.IO名前空間) 
使用ライブラリ:FileInfoクラス(System.IO名前空間) | 
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間