2011-07-30 5 views
0

次のコードブロックを使用してテキスト文字列を暗号化しています。 このコードはAES256EncryptWithKeyのメソッドに関連していますが、プロジェクトを実行してこのコードを使用するボタンをクリックすると、キャッチされない例外と警告が表示されます。この警告では、「NSStringが '-AES256EncryptWithKey'に応答しない可能性があります。私に何ができる?それは例外を処理するコードの塊を置くことは可能ですか?それとも全く違うの?ここでObjective-C暗号化との混乱 - 警告/エラーが発生しましたが、これをどのように修正できますか?

NSString *Input = [Inputbox text]; 
    [Input AES256encryptWithKey]; 

AES256EncryptWithKeyに関し、私が使用しているコードです:

@implementation NSData (AES256) 

- (NSData *)AES256EncryptWithKey:(NSString *)key { 
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise 
    char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused) 
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) 

    // fetch key data 
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 

    NSUInteger dataLength = [self length]; 

    size_t bufferSize = dataLength + kCCBlockSizeAES128; 
    void *buffer = malloc(bufferSize); 

    size_t numBytesEncrypted = 0; 
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
              keyPtr, kCCKeySizeAES256, 
              NULL /* initialization vector (optional) */, 
              [self bytes], dataLength, /* input */ 
              buffer, bufferSize, /* output */ 
              &numBytesEncrypted); 
    if (cryptStatus == kCCSuccess) { 
     //the returned NSData takes ownership of the buffer and will free it on deallocation 
     return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 
    } 

    free(buffer); //free the buffer; 
    return nil; 
} 

お礼を事前に。リンク、チュートリアル、アンサー、その他何かを感謝します。

答えて

2

実際にはNSStringがそのメッセージに応答しないため、NSDataにカテゴリが追加されました。あなたは明確に定義されたバイナリエンコーディングにNSStringあなたの潜在的にUnicodeを変換する必要がありますので、

覚えている暗号化は、バイナリデータ上で動作します(たとえば、UTF-8)

最速の変換は、NSStringのdataWithEncodingメソッドを使用することです。

+0

あなたの助けをありがとう、私の問題を解決する必要があります! –

0

エラーが最初の行にあるように思わ、それが

@implementation NSString (AES256) 

は、その後、あなたの方法であなたの文字列keydataWithEncodingメソッドを使用してNSDataに変換言うべき。

+0

これは今言うこと:) –

+0

申し訳ありませんが、私は編集前に提出しました;)修正済みです。 – uvesten

+0

あなたの編集したバージョンは動作しません - NSStringは 'bytes'メソッドを含んでいません。 –

関連する問題