Вы могли бы хотеть читать этот поток на блоге Haacked. Не имели шанса протестировать его, но суть находится в одной из последних строк:
ThreadPool.QueueUserWorkItem(callback => im.Send(to, from, subject, body));
Я понял, что GDI + использует WIC для выполнения определенных задач. По крайней мере, в Windows 7.
Обратите внимание на следующий код:
image.Write(target, ImageFormat.Gif);
Когда я запускаю этот код в Windows XP, он будет использовать кодировщик GDI + Gif для записи изображения в формате Gif. Когда я запускаю тот же код под Windows 7, он будет использовать WIC Gif Encoder.
Все функции автоматической регистрации зависят от кода времени загрузки и его способов избежать статического фиаско, например, функция, которая создает объект и возвращает его по запросу.
Но если вам не удастся загрузить то, что когда-либо это не сработает, объединение объектных файлов вместе сработает и также загрузит динамические библиотеки, но статические библиотеки никогда не будут связываться без явных зависимостей.
var salt = System.Text.Encoding.UTF8.GetBytes("my salt");
var password = System.Text.Encoding.UTF8.GetBytes("my password");
В дополнение к упомянутому классу HMACSHA1 выше, если вам просто нужен быстрый хэш с солью, то вы уже прошли 95% пути:
private static string GenerateHash(string value, string salt)
{
byte[] data = System.Text.Encoding.ASCII.GetBytes(salt + value);
data = System.Security.Cryptography.MD5.Create().ComputeHash(data);
return Convert.ToBase64String(data);
}
Настоящая уловка заключается в хранении соли в безопасном месте, например в файле machine.config.
Microsoft сделала эту работу за вас, но для этого нужно немного покопаться. Установите расширения веб-служб 3.0 и ознакомьтесь с функцией Microsoft.Web.Services3.Security.Tokens.UsernameToken.ComputePasswordDigest
с Reflector.
Я хотел бы разместить здесь исходный код этой функции , но я не уверен, законно ли это делать. Если кто-то может меня успокоить, я сделаю это.