[iOS] AES128暗号化ライブラリ FBEncryptor 公開

2011年6月3日金曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

AESで暗号化・復号化できる CCCrypt の簡易ラッパー FBEncryptor を作りました。結果(バイナリ値)を Base64 で受け取ることもできます。
dev5tec/FBEncryptor - GitHub

暗号化方式
アルゴリズム:AES 128
モード:CBC
鍵長:256ビット
パディング:PKCS7
これ一種類だけ

インストール


GitHubからプロジェクトをダウンロードした後 Xcode 4 で開く。その中から下記のファイルを自分のプロジェクトへコピーして追加する。

FBEncryptorAES.h
FBEncryptorAES.m
NSData+Base64.h
NSData+Base64.m


使い方


NSDataベースの暗号化・復号化


Data系メソッドを使う。
+ (NSData*)encryptData:(NSData*)data key:(NSData*)key iv:(NSData*)iv;
+ (NSData*)decryptData:(NSData*)data key:(NSData*)key iv:(NSData*)iv;

こんな感じ。
NSData* encryptedData = [FBEncryptorAES encryptData:data
            keyData:key
             iv:iv];

NSData* decryptedData = [FBEncryptorAES decryptData:encryptData
             keyData:key
              iv:iv];
iv (Initialization Vector) は nil指定可能。

ランダムな iv を生成するユーティリティメソッドも用意した。
NSData* iv = [FBEncryptorAES generateIv];
iv として利用可能な 16バイトのランダムなバイナリ値を返す。
バイナリ値を16進数文字列に変換するメソッドも付けてある。
SString* hexString = [FBEncryptorAES hexStringForData:iv];
 (例) @"b20cd8d972e65762824cc3190040388c"

NSData* bin = [FBEncryptorAES dataForHexString:hexString]; // 逆変換

文字列を暗号化したい場合は後述の Base64ベースのメソッドを使うか -[NSString dataUsingEncoding:] を使えば良い。こんな感じ。
data = [FBEncryptorAES encryptData:[str dataUsingEncoding:NSUTF8StringEncoding]
  key:[keyStr dataUsingEncoding:NSUTF8StringEncoding]  iv:nil];


Base64ベースの暗号化・復号化


NSDataの代わりに NSString を引数に取る。暗号化の結果は Base64エンコードされる。復号時はこの Base64エンコードされた文字列を引数に取る。iv は指定できない。
+ (NSString*)encryptBase64String:(NSString*)string
 keyString:(NSString*)keyString separateLines:(BOOL)separateLines;
+ (NSString*)decryptBase64String:(NSString*)encryptedBase64String
 keyString:(NSString*)keyString;

使い方はこんな感じ。
NSString* encrypted = [FBEncryptorAES encryptBase64String:@"Hello"
                  keyString:@"somekey"
          separateLines:NO];
NSString* decrypted = [FBEncryptorAES decryptBase64String:encrypted
                  keyString:@"somekey"];
結果例
暗号化前文字列:@"Hello"
暗号化後文字列:@"gT2IUF9Jzmn7wglXk3XC3w=="
最後の separateLines: オプションは結果の Base64 を改行で区切るかどうかを指定する。YES の場合、64バイト毎に CRLFを挿入した文字列を返す。


カスタマイズ


FBEncryptor.h 内の定数を変更するとコンパイル時に鍵の長さを変更できる。
#define FBENCRYPT_KEY_SIZE      kCCKeySizeAES256
例えば kCCKeySizeAES128 とすれば鍵長を 128ビットにできる。※ただしテストケースは 256ビット用に書かれているのでここを変更するとテストに失敗する。

また CBCモードを持つ暗号化アルゴリズムであれば同じく FBEncryptor.h 内の定数の書き換えでコンパイルできるかもしれない(試していないので動作するか不明)。
#define FBENCRYPT_ALGORITHM     kCCAlgorithmAES128
#define FBENCRYPT_BLOCK_SIZE    kCCBlockSizeAES128
#define FBENCRYPT_KEY_SIZE      kCCKeySizeAES256
指定可能な定数は CommonCryptor.h 辺りを参照のこと。


サンプル


暗号化・復号化が試せるサンプルアプリが付属する。


ソース解説


単純な CCCrypt のラッパーなので特別なことはやっていないので解説は割愛。

なお Base64エンコード・デコードのライブラリに Matt Gallagher 氏のソースコードを借用している(base64EncodedStringWithSeparateLines関数の追加あり)。
Cocoa with Love: Base64 encoding options on the Mac and iPhone

この為、FBEncryptor ライブラリを使う場合、一部のソースコードライセンスは MIT ではなく、Gallagpherさんの方のライセンスに従うので注意。



ライセンス


今回は借用ソースがあるので2つのライセンスが混在する。

FBEncryptor.m/FBEncryptor.h

MIT ライセンス。商用・非商用を問わず利用可能。カスタマイズしての再配布も自由。連絡も不要。

NSData+Base64.m/NSData+Base64.h

Created by Matt Gallagher on 2009/06/03.
Copyright 2009 Matt Gallagher. All rights reserved.

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software. Permission is granted to anyone to
use this software for any purpose, including commercial applications, and to
alter it and redistribute it freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
   claim that you wrote the original software. If you use this software 
   in a product, an acknowledgment in the product documentation would be
   appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
   misrepresented as being the original software.
3. This notice may not be removed or altered from any source
   distribution.


関連情報


Responses

Leave a Response

人気の投稿(過去 30日間)