0

暗号化を安全にするためにキーをソルトする方法についてのチュートリアルを読んでいましたが、それを十分に活用できませんでした。暗号化についてはよくわかりません。助けが必要です。私はcommoncryptoを使用してファイルを暗号化していますが、安全ではないという事実を除いて、完了しています...ユーザーが同じ正確なファイルを同じ正確なキーで2回暗号化する場合、暗号文は同じであってはなりません。

これは私が持っているものです:

- (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)

    NSLog(@"You are encrypting something...");

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

   NSUInteger dataLength = [self length];

   //See the doc: For block ciphers, the output size will always be less than or 
   //equal to the input size plus the size of one block.
   //That's why we need to add the size of one block here
   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;
}

誰かが私を助けてくれて、私がどのようにソルトを実装するかを正確に教えてくれるなら、それは素晴らしいことです!再度、感謝します!

4

1 に答える 1

1

まず、ここで探しているのは初期化ベクトルまたはIVと呼ばれます。ソルトは、暗号ではなく、ハッシュとともに使用されます。IVと塩の両方がナンスの特定の例であることに注意してください。

用語がわからなくなったので、別の暗号モードを使用します。現在、 ECBと呼ばれる「電子コードブック」を使用しています。お気づきのように、同じ平文を2回暗号化すると同じ暗号文になり、攻撃者が潜在的な平文を推測できる場合は元に戻すことができるという欠点があります。

これを修正するいくつかの代替暗号モードがあります-最も人気のあるものの1つはCBCです-「暗号ブロック連鎖」。基本的に、最初にランダムブロック(IV)を挿入します。次に、ブロックごとに、前の暗号文ブロック(最初のブロックの場合はIV)を平文ブロックとXORしてから、暗号を通過させます。

于 2011-09-19T00:33:42.900 に答える