GROUPエンジニアブログです。GROUPのしんばし(@shinbashi)です。昨今何につけてもスマートフォンですよね。いう僕もPDAからのW-ZERO3という王道を通って来ました。最近は特にスマートフォン対応とか、アプリ化する機会が増えてきたと思います。android版を作ればiOS版も出すよ!みたいな話になりますよね。「android版だけでいい」なんて言葉を信じて設計すると、後で痛い目を見るのは火を見るより明らかです。前フリが長くなりました。android版だけだと信じて僕が痛い目を見たのは暗号化・復号処理の部分です。Javaはともかく、Objective-Cをよく知らなかったのでライブラリに頼るわけですが、Objective-Cの暗号化・復号処理をしてくれるライブラリでは扱えないアルゴリズムとかあるんですね。(ブロック長の違いなのでPKCS7でPKCS5形式のものをunpad出来る)実際、パディング処理は暗号化前、復号後に自前でやってしまえばいいのでなんとでもなりますね。してみると、暗号化アルゴリズムはAESで実装するのが妥当そうです。Objective-Cで自前でPKCS5でunpadする場合は以下な感じになると思います。pad)];}ざっくりまとめるとアルゴリズム:AES(鍵長は128でも256でもいいと思います)ブロック形式:CBC(EBCも使えます)パディング:PKCS5(独自で実装できるのでお好きにどうぞ)な感じで暗号化しておけば、android(java)でもiOS(Objective-C)でも取り扱いできます。javax.cryptやCCCryptの使い方は色々な方が解説していらっしゃるのでそちらを参考にしていただければと思います。Javaのコード長すぎて写すのを面倒臭がっているわけではありません。僕の場合だけかもしれませんが、CCCryptを使った時に、末尾に改行コードが含まれていて、NSDataからNSStringに変換しようとした時にエラーが発生したので、トリムする必要があるかもしれません。WindowsPhoneに関してですが「C#だし」ってことで割愛させて頂きました。OpenSSLの暗号文をJava/Perl/Rubyで開くhttp://alpha.mixi.co.jp/blog/?p=91こちらでJavaでOpenSSLのパスフレーズから鍵を導出する処理が書かれていたので、せっかくなのでObjective-Cで実装するとどうなるのか書いてみました。