Вы можете реализовать базовое исчисление и создать универсальную функцию для перемещения элемента массива из одной позиции в другую.
Для JavaScript это выглядит так:
function magicFunction (targetArray, indexFrom, indexTo) {
targetElement = targetArray[indexFrom];
magicIncrement = (indexTo - indexFrom) / Math.abs (indexTo - indexFrom);
for (Element = indexFrom; Element != indexTo; Element += magicIncrement){
targetArray[Element] = targetArray[Element + magicIncrement];
}
targetArray[indexTo] = targetElement;
}
Check
http://www.gloommatter.com/DDesign/programming/moving-any-array-elements-universal-функция. HTML
Относительно Вашего 2-го вопроса: Возможно, этот Статья MSDN помогает.
Согласно документам можно настроить алгоритм шифрования как это:
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
validation="3DES"
decryption="3DES"/>
Для проверки, можно использовать одно из следующего: [SHA1 | MD5 | 3DES | AES]
Для дешифрования, можно использовать одно из следующего te: [Автоматический | DES | 3DES | AES]
Поэтому, чтобы быть совместимым FIPS, Вы могли бы использовать 3DES (хотя AFAIK, теоретически менее безопасный).
Мы попробовали machineKey, который Вы предлагаете. Этому помогают с некоторыми веб-приложениями (при соединении с), который является большим, но не весь из них, который печален.
я пропускаю что-то, но danged, если я могу сказать что.
Еще раз проверьте, нет ли
в вашем Web.config. Когда установлена отладочная компиляция, .NET использует хеш MD5 для некоторой внутренней бухгалтерии. MD5 несовместим с FIPS, поэтому вы получаете эту ошибку.
Некоторые сайты, такие как сайты SharePoint, имеют машинный ключ SHA1 уже в веб-конфигурации, поэтому проверьте, есть ли там алгоритм, если он есть, удалите его и добавьте выше.
Source: http://blogs.msdn.com/b/shawnfa/archive/2008/03/14/disabling-the-fips-algorithm-check.aspx
Вы можете добавить следующее в ваш web.config или machine.config, чтобы ваши приложения ASP.Net перестали выходить из строя из-за проверок соответствия FIPs.
<configuration>
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
Ваш machine.config можно найти здесь: \Microsoft.NET\Framework\\\config\machine.config
Если вы измените свой machine.config, может потребоваться iisreset, чтобы настройки вступили в силу. Примечание: изменение конфигурации maching.config повлияет на все приложения .NET в системе.
Чтобы добиться совместимости приложения с FIPs без необходимости отключения FIPs, можно попробовать следующее:
1) Настройте машинный ключ на использование 3DES для расшифровки и SHA1 для проверки.
EDIT (2018-04-05): В новом STIG для IIS8.5 говорится, что вы должны установить настройки машинного ключа на Validation: HMACSHA256, Шифрование: Auto.
<configuration>
<system.web>
<authentication mode="Windows" />
<machineKey decryption="3DES" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" validationKey="AutoGenerate,IsolateApps" />
</system.web>
</configuration>
ПРИМЕЧАНИЕ: если вы используете среду веб-фермы, вы можете использовать IIS GUI и перейти к разделу конфигурации машинных ключей, чтобы сгенерировать набор ключей и использовать одни и те же ключи в веб-ферме.
2) Убедитесь, что ваша компиляция debug="false", а все директивы страницы имеют debug="false". Установка значения debug в true также запустит проверку соответствия FIPs.
Ключ машины viewstate и проблемы конфигурации compilation = "debug" являются наиболее частыми причинами этой проблемы из того, что я видел. Насколько мне известно, в .NET 2.0 алгоритм 3DES для проверки / шифрования состояния просмотра - ЕДИНСТВЕННЫЙ алгоритм, совместимый с FIPS. Так что параметры SHA1, MD5 и AES там работать не будут.
Также важно понимать, что если в коде есть ссылка на ЛЮБОЙ алгоритм, не соответствующий требованиям FIPS, даже если он фактически никогда не использовался / не был доступен, вызовет ошибку соответствия FIPS. Например, простое объявление переменной MD5CryptoServiceProvider без ее создания вызовет ошибку. Сюда входят и другие сборки .NET, на которые есть ссылки, поэтому убедитесь, что никакие библиотеки DLL, на которые есть ссылки, возможно, также не используют алгоритмы, несовместимые с FIP.
Вот удобный сайт, на котором перечислены все алгоритмы FIPS и не-FIPS в .NET. http://blog.aggregatedintelligence.com/2007/10/fips-validated-cryptographic-algorithms.html