iOS(objective-c)にてAESでエンコードしたものをrubyでデコードしたい
iOSにて以下あたりのライブラリを使ってAESにて暗号化をした際に、その暗号文字列をrubyでデコードする際にちょっとはまったので備忘しておきます。
https://gist.github.com/838614
iOSのコード
NSString *plain = @"paco"; NSString *key = @"32byte32byte32byte32byte32byte!!"; NSString *enc = [plain AES256EncryptWithKey:key]; NSLog(enc); // mmNQPHai0BjORX3jCeY3YQ== が得られる NSLog([enc AES256DecryptWithKey:key]);
rubyのコード
# -*- coding: utf-8 -*- require 'openssl' key = "32byte32byte32byte32byte32byte!!" base64_text = 'mmNQPHai0BjORX3jCeY3YQ==' s = base64_text.unpack('m')[0] dec = OpenSSL::Cipher::Cipher.new('AES-256-CBC') dec.decrypt dec.key = key dec.iv = "\000"*32 a = dec.update(s) b = dec.final puts a + b # > paco
肝はivをヌル文字32個で設定してあげる事(上記ライブラリがivをNULLでハードコーディングしちゃってるので)とkeyを32バイトで設定してあげる事(これまたNULLパディングしてるので、めんどくさい方は32文字で設定しましょう)