見出し画像

PowerShellでシーザー暗号使ってみたい

 PowerShellでシーザー暗号をやってみたいと思います。
PowerShellスクリプトを難読化したくてWEB検索したとき、
だいたいBase64にするブログ記事が見つかります。
Base64だと簡単に戻せるので難読にならないのですが、
なぜか多くの記事が見つかります。
パッと読めなかったらOKってことでしょう。
パッとみて読めなかったらいいなら、シーザー暗号でもいいかなと思って
暗号部分だけスクリプトを書いてみました。

シーザー暗号とは

 シーザー暗号とは平文の各文字をアルファベット順的に決まった量だけシフトしたものを暗号文とする暗号になります。暗号文を平文に戻すときはアルファベット順的に決まった量だけ逆シフトすることになります。

スクリプトはこちら

function Caesar(){
 #$wordを$key分だけ変換する
 param(
   $word,
   $key 
 )

 # 使用する文字列
 $dictionary = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

 # 入力された文字列を配列に変換
 $word = $word.ToCharArray()

 for ($i=0; $i -lt $word.Length; $i++){

  if ($dictionary.IndexOf($word[$i]) -eq -1){
   # 文字が使用する文字列に含まれない場合処理をしない
  }else{
   # 辞書からはみ出る場合は先頭に戻る
   $shiftcnt=$dictionary.IndexOf($word[$i])+$key
   if($shiftcnt -ge $dictionary.Length){
    $shiftcnt %= $dictionary.Length
   }

   # それ以外の場合、文字を使用する文字列の1つ後の文字に置換
   $word[$i] = $dictionary[$shiftcnt]
  }
 }

 # 変換した配列を文字列に戻す
 $word = $word -join ""

 return $word
}

テストしてみるときは

こんな感じ
Caesar "<暗号化したい文字列>" <テキトーな数字>

戻すときは数字をマイナスにして使います。

パスワードとかAPIキーとかをスクリプトに直書きするときに使えます。
シーザー暗号なら文字数も増えないしBase64よりいいんじゃないでしょうか


#PowerShell #プログラミング学習 #暗号化

この記事が気に入ったらサポートをしてみませんか?