2012-05-04 5 views
1

следующих алгоритмов шифрования и дешифрований называются с помощью PowerShell и на странице приложения Sharepoint:зашифрованная строка изменения на домене разных приложений

public static string Encrypt(string dataToEncrypt, string password, string salt) 
    { 
     AesManaged aes = null; 
     MemoryStream memoryStream = null; 
     CryptoStream cryptoStream = null; 

     try 
     { 
      Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt), 10000); 

      aes = new AesManaged(); 
      aes.Key = rfc2898.GetBytes(32); 
      aes.IV = rfc2898.GetBytes(16); 

      memoryStream = new MemoryStream(); 
      cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write); 

      byte[] data = Encoding.UTF8.GetBytes(dataToEncrypt); 
      cryptoStream.Write(data, 0, data.Length); 
      cryptoStream.FlushFinalBlock(); 

      return Convert.ToBase64String(memoryStream.ToArray()); 
     } 
     finally 
     { 
      if (cryptoStream != null) 
       cryptoStream.Close(); 

      if (memoryStream != null) 
       memoryStream.Close(); 

      if (aes != null) 
       aes.Clear(); 
     } 
    } 

Почему зашифрованная строка изменение? Это о домене приложения?

+0

Возможно, потому что для предотвращения атак MITM добавлено случайное дополнение. – Oded

+0

Я пробовал вам код и, похоже, генерирует тот же результат независимо от области приложения. Вы уверены, что нет других преобразований? – GolfWolf

+0

@Oded: Когда я определяю заполнение как ничто, проблема остается. – onatm

ответ

1

Зашифрованная строка отличается из-за символа $. $ должен быть экранирован во время вызова функции через powershell.

1

Когда я запускаю код вопросов, с теми же данными, паролем и солью, он производит одинаковый результат каждый раз. Вы должны убедиться, что dataToEncrypt и Salt одинаковы каждый раз, если один байт изменяет остальную часть изменения.

Однако, если говорить о семантической безопасности, это не то, что вы хотите. Вы хотите, чтобы случайная соль затрудняла грубую силу пароля и случайный несекретный набор IV, чтобы два одинаковых открытого текста не имели одинакового зашифрованного текста.

Вот пример наилучшей практики для encrypting and decrypting string, используя функции защиты алгоритмов шифрования по мере их разработки. SimpleEncryptWithPassword аналогичен тому, что вы делаете, хотя в примере итерации для производного ключа являются переменными и по соображениям производительности вы, вероятно, захотите его жестко закодировать.

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