暇を見つけては社内で使うちょっとしたWebアプリケーションの開発を進めているのですが、その中でクライアント(JavaScript)-サーバ(Perl)間での暗号化・復号を行う仕組みが必要となったため公開鍵暗号方式のRSAによる実装にトライしてみました。
やりたいことの流れはこんな感じ。
- サーバ(Perl)側でRSA鍵(秘密鍵・公開鍵)を生成
- 公開鍵をクライアント(JavaScript)に渡す
- クライアント(JavaScript)側で公開鍵を用いて暗号化
- 暗号化された文字列をサーバ(Perl)に返す
- サーバ(Perl)側で秘密鍵を用いて復号
色々なモジュールを試してみたのですが、RSAといっても種類が色々あるようで(?)組み合わせによっては元の文字列を上手く復元出来ないケースもあり難儀しましたが、最終的にJavaScript側で「JSEncrypt」、Perl側は「Crypt::OpenSSL::RSA」を利用することで上手く行きました。

