paranitips

Never stop learning! がモットーのゆるふわエンジニアブログ

文字列をblowfish暗号化する

文字列を暗号化する方法のメモ。今回は可逆暗号化が目的なのでblowfishを使います。

Security.frameworkが必要なので、Build Phasesで追加してください。

#import <CommonCrypto/CommonCrypto.h>

// 文字列をblowfish暗号化する
+ (NSString *)encodeBlowfish:(NSString *)str
{
    NSData *key = [@"key" dataUsingEncoding:NSUTF8StringEncoding];
    NSData *iv = [@"salt" dataUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableData *myEnc = [NSMutableData dataWithLength:kCCKeySizeMaxBlowfish+str.length];
    
    size_t wSize = ( ( myEnc.length + kCCBlockSizeBlowfish - 1 ) / kCCBlockSizeBlowfish ) * kCCBlockSizeBlowfish;
    char   v[ wSize ];
    
    CCCrypt(kCCEncrypt,
            kCCAlgorithmBlowfish,
            kCCOptionPKCS7Padding,
            key.bytes,
            key.length,
            iv.bytes,
            data.bytes,
            data.length,
            v,
            wSize,
            &wSize);
    
    return [NSData dataWithBytes:v length:wSize];
}

文字列として扱いたい場合は以下のようにすればOK。

  NSData *data = [self encodeBlowfish:@"hoge"];
  NSString *str = [data description];

参考