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