Have I been Pwnedにパスワードを送らずに漏洩チェックするスクリプト

広告

今回は記事短め、タイトル通りHave I been Pwnedというパスワードの漏洩をチェックできるサイトで漏洩チェックするスクリプトをPowerShell で作成しました。

当のチェックサイトがパスワードを収集しているのではないかという不安に駆られたので、SHA1ハッシュを送信して漏洩のチェックをします。

参考サイト(非常に助かりました)
https://news.mynavi.jp/techplus/article/20190625-848118/

PowerShellスクリプト

コピペしてPS1として保存すればそのまんま使えます。なおSet-ExecutionPolicy RemoteSignedは必要な模様。

param(
    [string]$password
)


$stream = [IO.MemoryStream]::new([Text.Encoding]::UTF8.GetBytes($password))
$hash = Get-FileHash -InputStream $stream -Algorithm SHA1

$url = "https://api.pwnedpasswords.com/range/" + $hash.hash.Substring(0,5)

$res = Invoke-WebRequest $url
#$res.content

if($res.content.Contains($hash.Hash.Substring(5))){
    $PwnHash = $res.Content -split "`r`n"
    $match = $PwnHash | Select-String -Pattern $hash.Hash.Substring(5)
    $match
}else{
    "Cannot Find Hash."
}

使い方

コマンド引数として-passwordを指定し、その後にチェックしたいパスワードを入力してください。

ハッシュ比較をするため、Have I Been Pwnedにパスワードは送信しません。

ハッシュ値の後に続くコロン以下の数字が漏洩回数です。123456やpasswordといった超簡単パスワードは3千万回とか1千万回とか漏洩していますので使用は厳禁です。

ランダムなパスワードを入力するとハッシュが見つからないことが出力されます。

まとめ

とりあえずできたので個人的に満足、改造二次配布はご自由に。もちろん自己責任でお願いします。
(備忘録的な記事なので解説ほぼしてませんすみません)

広告