2016-09-02 24 views
0

このアルゴリズムに従ったiOSで文字列を暗号化/復号化する方法はありますか? 私はjavaでこのクラスを知っています:javax.crypto.Cipherはこの目的で使用されています暗号化復号化AES/ECB/NoPadding

+0

はい、あります。 –

+1

** [ECBモード](http://crypto.stackexchange.com/q/14487/13022)**は絶対に使用しないでください。それは決定論的であり、したがって意味的に安全ではありません。少なくとも、[CBC](http://crypto.stackexchange.com/q/22260/13022)や[CTR](http://crypto.stackexchange.com/a/2378/)のようなランダム化モードを使用する必要があります13022)。 [パディング・オラクル攻撃](http://crypto.stackexchange.com/q/18185/13022)のような攻撃が不可能になるように、あなたの暗号文を認証する方が良いです。これは、GCMやEAXなどの認証モードや[暗号化MAC](http://crypto.stackexchange.com/q/202/13022)スキームで行うことができます。 –

答えて

0

Apple Common CryptoはAES、ECBモード(CBCモードを使用)とパディングなしをサポートしています。パディングを使用しない場合、入力データ長はAESブロックサイズ(16バイト)の倍数でなければなりません。標準パディングはPKCS#7(néePKCS#5)です。

複数の言語とプラットフォームをサポートするRNCryptorなど、安全な暗号化をサポートするソリューションを使用する方がよいでしょう。

暗号化を使用するだけでセキュリティが提供されないため、他の暗号化プリミティブと組み合わせて正しく使用する必要があります。

0

アップルの一般的なCrptoはそれをサポートしています。 Import CommonCryptor.hとCCCryptorStatus "CCCrypt"が必要です。

はここに例を示します

+ (NSData *)encryptDataWithAESECB:(NSData *)data 
           key:(NSData *) key 
          error:(NSError **)error { 
    size_t outLength; 

    int cipherLen = (int)(data.length/kAlgorithmBlockSize + 1)*kAlgorithmBlockSize; 
    NSMutableData *cipherData = [NSMutableData dataWithLength:cipherLen]; 
    NSData *newData = [self addPaddingBeforeEncryptWithAESECB:data]; 

    CCCryptorStatus result = CCCrypt(kCCEncrypt, // operation 
            kAlgorithm, // Algorithm 
            kCCOptionECBMode, // Mode 
            key.bytes, // key 
            key.length, // keylength 
            0,// iv 
            newData.bytes, // dataIn 
            newData.length, // dataInLength, 
            cipherData.mutableBytes, // dataOut 
            cipherData.length, // dataOutAvailable 
            &outLength); // dataOutMoved 
    if (result == kCCSuccess) { 
     cipherData.length = outLength; 
    }else { 
     if (error) { 
      *error = [NSError errorWithDomain:kRNCryptManagerErrorDomain code:result userInfo:nil]; 
     } 
     return nil; 
    } 
    return cipherData; 
} 

詳細についてはここで私の記事を参照してください: はAES ECB iOS Encrypt