2

このスレッドを見たことがありますが、そこで言及されている暗号化手法はうまく機能しています。しかし、すべての場合ではありません。

要件:

シンプルで、1 つの画像を取得して暗号化し、暗号化されたデータを保存します。後で、暗号化されたデータを取得して解読し、元の画像を再作成して表示します。

私がやった事

上記のスレッドから、AES 256 暗号化用の NSData の追加が見つかりました。私はそれを使用しようとしましたが、部分的に成功しました。これがコードです

//encryption
NSData *srcData       =   UIImageJPEGRepresentation(srcImage, 1.0);
NSLog(@"srcData length : %d",[srcData length]);
NSData *encryptedData =   [srcData AES256EncryptWithKey:KEY];
NSLog(@"encrypted data length : %d",[encryptedData length]);

........

//later..
//decryption
decryptedImage  =   [UIImage imageWithData:[encryptedData AES256DecryptWithKey:KEY]];
imageView.image =   decryptedImage;

何が起こっている

小さな画像、たとえば解像度 48*48 の画像の場合、このコードは正常に機能しています。しかし、より高い解像度 (たとえば 256 * 256) の画像でコードを実行すると、メソッドAES256EncryptWithKeyはエラーkCCBufferTooSmall(-4301) で失敗します。

質問

  1. AES 256 は、暗号化されるペイロードのサイズ (バイト単位) に制限を課しますか?
  2. 最初の質問への答えがYESの場合、画像 (おそらく大きなもの) を暗号化するために、iPhone で使用する暗号化アルゴリズムの種類は何ですか?
  3. 最初の質問に対する答えがNOの場合、なぜこのエラーが発生するのでしょうか?
4

1 に答える 1

1
  1. いいえ、そうではありません。一部のハッシュ関数には最大値がありますが、それは 2^64 程度なので、通常は心配する必要はありません。
  2. なし
  3. おそらく呼び出しdataWithBytesNoCopyとの組み合わせに関係がありmallocますが、実際にコードを実行しないと見つけるのは困難です。

を使用せずに一度にすべて暗号化する必要があるため、そのラッパーはかなり頭がおかしいことに注意してくださいCCCryptorUpdate。セキュリティを危険にさらす IV は使用しません。キーを文字列として扱います。最後に、復号化のためのバッファ サイズが大きすぎます。より信頼できるソースを使用して独自に作成することをお勧めします。

于 2012-12-30T00:32:02.160 に答える