2012年11月28日水曜日

◆ファイルを暗号化する

以下のサイトを参考に暗号化の処理を書いてみた。
10 行でズバリ !! 暗号化 (C#) 言語: C#

現在は「AES」が主流のようだが、このサンプルは「Triple DES」を使っている。

ここで使用する「TripleDESCryptoServiceProvider」クラスをインスタンシングすると秘密鍵と初期化ベクターが作られる。
本来はそれを送信相手の公開鍵で暗号化して送ることになるのだろうが、今回はサンプルなので判りやすさを優先し、両方ともコンスタントで指定している。

あとは単純にC#をPowershellに落としただけなので結果だけ載せておく。
デスクトップに元ファイルを作っておき、エンコードしたファイル、デコードしたファイルをそれぞれ作成している。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028

$inPath = "F:\Desktop\myTest.txt"
$encPath = "F:\Desktop\Enc.txt"
$decPath = "F:\Desktop\Dec.txt"

$desKey = [byte[]](1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1)
$desIV = [byte[]](0,0,0,0,0,0,0,0)
$src = [System.IO.File]::ReadAllBytes($inPath)

#暗号化
$desProvider =
 
  
New-Object System.Security.Cryptography.TripleDESCryptoServiceProvider
$encryptor = $desProvider.CreateEncryptor($desKey,$desIV)
$ms = New-Object System.IO.MemoryStream
$cs = New-Object System.Security.Cryptography.CryptoStream
(
  
$ms, $encryptor, [System.Security.Cryptography.CryptoStreamMode]::Write)
$cs.Write($src,0,$src.Length)
$cs.Close()
[System.IO.File]::WriteAllBytes($encPath,$ms.ToArray())

#複合化
$src = [System.IO.File]::ReadAllBytes($encPath)
$decryptor = $desProvider.CreateDecryptor($desKey,$desIV)
$ms = New-Object System.IO.MemoryStream
$cs = New-Object System.Security.Cryptography.CryptoStream
(
  
$ms, $decryptor, [System.Security.Cryptography.CryptoStreamMode]::Write)
$cs.Write($src,0,$src.Length)
$cs.close()
[System.IO.File]::WriteAllBytes($decPath,$ms.ToArray())
<!--EndFragment

参考までに、キー及び初期化ベクターをファイルに作成するスクリプトは以下のようになる。

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017

#◆Key作成.ps1
$currntPath = Split-Path $myInvocation.MyCommand.path
$keyPath = Join-Path $currntPath "Key.dat"
$ivPath = Join-Path $currntPath "IV.dat"
$now = (Get-Date).ToString("yyyyMMddHHmm")
if(Test-Path $keyPath
){
 
ren $keyPath "$keyPath.$now"
}
if(Test-Path $ivPath
){
 
ren $ivPath "$ivPath.$now"
}

#暗号化キーおよび初期化ベクター作成
$desProvider =
 
  
New-Object System.Security.Cryptography.TripleDESCryptoServiceProvider
[System.IO.File]::WriteAllBytes($keyPath,$desProvider.Key)
[System.IO.File]::WriteAllBytes($ivPath,$desProvider.IV)
</DI

0 件のコメント:

コメントを投稿