以下のサイトを参考に暗号化の処理を書いてみた。
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()) |
参考までに、キー及び初期化ベクターをファイルに作成するスクリプトは以下のようになる。
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) |
0 件のコメント:
コメントを投稿