2017-01-02 3 views
1

В официальном описании метода, Microsoft объясняет в следующей ссылке, что MachineKey.Protect «защищает указанные данные путем шифрования или его подписания»: https://msdn.microsoft.com/en-us/library/system.web.security.machinekey.protect(v=vs.110).aspxКак работает MachineKey.Protect?

Что это значит? Как он решает зашифровать, подписать или и то, и другое?

ответ

1

Оба MSDN documentation или .NET Web Development and Tools Blog не сообщают точно, как это работает, но this article упоминает, что API MachineKey выполняет обе операции (что более безопасно, кстати).

Я пошел немного глубже в .NET Reference Source, и, по-видимому, это правда. Проверьте этот кусок кода:

using (ICryptoTransform encryptor = encryptionAlgorithm.CreateEncryptor()) { 
    using (CryptoStream cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write)) { 
     cryptoStream.Write(clearData, 0, clearData.Length); 
     cryptoStream.FlushFinalBlock(); 

     // At this point: 
     // memStream := IV || Enc(Kenc, IV, clearData) 

     // These KeyedHashAlgorithm instances are single-use; we wrap it in a 'using' block. 
     using (KeyedHashAlgorithm signingAlgorithm = _cryptoAlgorithmFactory.GetValidationAlgorithm()) { 
      // Initialize the algorithm with the specified key 
      signingAlgorithm.Key = _validationKey.GetKeyMaterial(); 

      // Compute the signature 
      byte[] signature = signingAlgorithm.ComputeHash(memStream.GetBuffer(), 0, (int)memStream.Length); 

      // At this point: 
      // memStream := IV || Enc(Kenc, IV, clearData) 
      // signature := Sign(Kval, IV || Enc(Kenc, IV, clearData)) 

      // Append the signature to the encrypted payload 
      memStream.Write(signature, 0, signature.Length); 

      // At this point: 
      // memStream := IV || Enc(Kenc, IV, clearData) || Sign(Kval, IV || Enc(Kenc, IV, clearData)) 

      // Algorithm complete 
      byte[] protectedData = memStream.ToArray(); 
      return protectedData; 
     } 
    } 
} 

Это из NetFXCryptoService, который является поставщиком крипто по умолчанию в случае, если вы не задавались DataProtector

0

С первого пункта в разделе примечаний той же странице

Этот метод заменяет метод Encode, который требует, чтобы вызывающий указать, следует ли шифровать данные открытого текста, подписи, или обоих. Метод Protect выполняет соответствующую операцию и надежно защищает данные.

Что он пытается сказать, в зависимости от того, что вы прошли в параметру purposes это изменит то, что операция Protect будет делать. Вам нужно будет заглянуть в документацию дальше, чтобы узнать, какие цели делают какие действия. Какие строки делают какие действия зависят от Protected Configuration Provider, которые вы используете для своего сайта.

 Смежные вопросы

  • Нет связанных вопросов^_^