目的
bouncyCastleで使われていたjavaのrijndealクラスによる暗号化、復号処理をpowershellで再現する内容
鍵長は256ビットになっていなければならない。
rijndealとは
暗号化処理の規約になったAESとして採用された暗号化方法
IV(Initial Vector)と内容を暗号化した文字列を使って
暗号化文字列が作られている。
この時暗号化した文字列(鍵長)を128ビット、192ビット、256ビットの3つを選ぶことができた。
AESは統一化のために、128ビットで固定化されている。
RijnDealクラスをPowerShellで実装する際の注意
powershellは.NETで構成されているが
AESの暗号化のロジックだとうまく作れない。
rijndealだと鍵長を256ビットにできるが、AESでは128ビット固定になってしまう。128ビット以外はエラーになってしまう。
https://sp.otsuka-shokai.co.jp/words/aes.html#:~:text=AES%E3%81%A8%E3%81%AF,%E9%AB%98%E3%81%84%E3%81%A8%E3%81%84%E3%82%8F%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82
まあAES自体が鍵長を128bitに固定して、単純化と互換性を担保させてるらしいから、rijndealのように128bitや256bitも可能としてるのが古い規約のようだ。
今回はbouncyCastleで使われていたrijndealクラスによる暗号化処理をpowershellで再現する内容だったので
鍵長を32byte、つまりは256bitにしなくてはいけない。
だからAESクラスでは実装が不可能なので、推奨されていない昔のrijndealクラスを使って実装する必要がある。
PowerShellで実装する際の注意
実装としては、AESとほぼ一緒で使うクラスがrijndealになり
keysizeを256にするだけである。
http://programmers.high-way.info/vb/aes.html
keysizeを128bit以外にしなくてはならない時はrijndealを使おう。
おそらく元々の仕様に合わせる…などない限りはAESの規格で暗号化することになると思う。
正直今回のニーズが出ること自体稀だと思うので、もし同じような人がいたら参考にして欲しい。
おまけ
powershell coreで組むことは不可能です。
https://qiita.com/MuscleProgramer/items/99182c89a42a34826cd4