search
LoginSignup
0

posted at

updated at

bouncyCastleのrijndealクラスをpowershellで再現する

目的

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0