.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を呼び出せばよい。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:ディレクトリ&ファイル
使用ライブラリ:Fileクラス(System.IO名前空間)
使用ライブラリ:FileInfoクラス(System.IO名前空間)

この記事と関連性の高い別の.NET TIPS
文字列を暗号化するには?[C#/VB]
[ASP.NET]フォーム認証用のパスワードを暗号化するには?
ファイルをコピー/削除/リネーム/移動するには?
[ASP.NET]フォーム認証のユーザー管理をデータベース・サーバで行うには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間