HIRO's.NET Blog

PowerShellが好き

目次

Blog 利用状況

ニュース

あわせて読みたい

書庫

日記カテゴリ

リンク

SecurityStringから文字列を取得する(Windows PowerShell Tips)

ネタ元:データを取得してXMLファイルへ保存する(Oracle) (Windows PowerShell Tips)

で、SecurityStringの話をちらっとしたのですが、関数化しておくとSecurityStringからの文字列取得が少し楽になると思います。

ということで

Convert-ToStringBSTR.ps1

#===============================================================================
# Convert-ToStringBSTR: SecurityString文字列を解読した値を返す
#
# 使用例
#   PS > Convert-ToStringBSTR $SecurityString
#
# copyright HIRO's.NET(http://hiro.wankuma.com/)
#===============================================================================
function global:Convert-ToStringBSTR
{
  Param([System.Security.SecureString]$SecureString)
  
  $ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)
  $pass = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr)
  
  return $pass
}

使用方法ですが、まずSecurityStringを準備します

たとえば

PS C:\Work> $a = Read-Host "何か文字列を入力してね" -assecurestring

で、

PS C:\Work> Convert-ToStringBSTR $a

とすると解読した文字列が表示されます。



投稿日時 : 2008年1月15日 18:05

コメントを追加

# re: SecurityStringから文字列を取得する(Windows PowerShell Tips) 2008/01/15 19:38 シャノン

SecureStringをString型に入れちゃダメです。

http://akari.kabe.co.jp/magSite/Content.modf?id=20060713110548
http://akari.kabe.co.jp/MagSite/Content.modf?id=20060713180217

# re: SecurityStringから文字列を取得する(Windows PowerShell Tips) 2008/01/15 21:35 HIRO

ちょっと浅はかでした。

System.String を使用しない理由は下記の理由からですよね?
http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/pagguidelines0003.aspx#pagguidelines0003_sens3

機密性の高い情報の保存に System.String を使用することは、次の理由のために推奨されていません。

* 固定されません。つまり、ガーベッジ コレクタが動き回り、不定時間数の間、メモリ内のデータがそのままになります。
* 暗号化されません。したがって、データをプロセス メモリあるいはスワップ ファイルから読み取ることができます。
* 不変です。したがって、使用後データを消去する効果的な方法がありません。修正を行った場合、古いコピーと新しいコピー両方がメモリに残ります。

タイトル
名前
URL
コメント