Я подозреваю, что это - вопрос практичности, а не выполнимости. Я подозреваю, что существует очень, буквально несколько раз, где это ограничение на самом деле проблема, которая не может работаться вокруг - но добавленная сложность в компиляторе была бы очень значительной.
существует несколько вещей как это, что я уже встретился:
В каждом из этих случаев, было бы возможно получить немного больше свободы, за счет дополнительной сложности в компиляторе. Команда сделала прагматический выбор, за который я хвалю их - у меня был бы немного более строгий язык с точным компилятором на 99,9% (да, существуют ошибки; я столкнулся один на ПОЭТОМУ просто на днях), чем более выразительный язык, который не мог скомпилировать правильно.
РЕДАКТИРОВАНИЕ: вот псевдодоказательство того, как это, почему это выполнимо.
Полагают что:
Теперь преобразуйте:
try
{
Console.WriteLine("a");
yield return 10;
Console.WriteLine("b");
}
catch (Something e)
{
Console.WriteLine("Catch block");
}
Console.WriteLine("Post");
в (вид псевдокода):
case just_before_try_state:
try
{
Console.WriteLine("a");
}
catch (Something e)
{
CatchBlock();
goto case post;
}
__current = 10;
return true;
case just_after_yield_return:
try
{
Console.WriteLine("b");
}
catch (Something e)
{
CatchBlock();
}
goto case post;
case post;
Console.WriteLine("Post");
void CatchBlock()
{
Console.WriteLine("Catch block");
}
единственное дублирование находится в установке блоков попытки/выгоды - но это - что-то, что компилятор может, конечно, сделать.
я, возможно, пропустил что-то здесь - если так, сообщите мне!
Это не полный ответ, но Я могу вам сказать, что 13-я шестнадцатеричная цифра всегда равна 4, потому что она обозначает версию алгоритма, используемого для генерации GUID (id est, v4); также, и я цитирую Википедию:
Криптоанализ GUID WinAPI генератор показывает, что, поскольку последовательность GUID V4 псевдослучайна, учитывая начальное состояние, можно прогнозировать до следующих 250 000 GUID возвращаемый функцией UuidCreate. Вот почему не следует использовать GUID. в криптографии, например, как случайные ключи.
Остальная часть статьи и ссылки на нее: http://en.wikipedia.org/wiki/Guid
--Edit--
From с точки зрения безопасности, я бы посоветовал вам сгенерировать свой идентификатор сеанса так, как вам хочется, а затем криптографически подписать его; таким образом вы можете упаковать любую информацию, которую хотите, а затем просто поставить подпись на конце - возможная проблема заключается в компромиссе между размером / силой вашего ключа и результирующим размером файла cookie. GUID полезны как идентификаторы, но я бы полагался только на специальный криптографический метод для обеспечения безопасности.
Я предлагаю вам использовать System.Security.Cryptography.RandomNumberGenerator . Это предназначено для получения чисел, которые нельзя реконструировать. Мотивация Гида - быть уникальным. Вы можете комбинировать как GUID, так и безопасное случайное число, но 128-битное безопасное случайное число никогда не будет конфликтовать на практике.
] Некоторые примечания:
Если вы ' Если вас действительно беспокоит наличие сильных идентификаторов сеансов, то, возможно, лучшим подходом будет криптографически безопасный хэш чего-то, что не может быть определено извне.
Что вы пытаетесь сделать? Хотите только источник случайных чисел?
Посмотрите random.org и hotbits . Много-много лет назад у меня была библиотека Java, которая собирала числа из этих источников и объединяла их вместе, чтобы получить довольно красивый случайный ряд (хотя предполагается, что эти два сайта не находятся в сговоре).
Короткий ответ: ни один guid не является достаточно сильным, чтобы сгенерировать идентификаторы сеанса, если вы хотите предотвратить угадывание и взлом идентификатора сеанса.
По той же причине, почему вы этого не хотите. Чтобы использовать GUID в качестве ключа AES, вы не хотите использовать их для каких-либо типов конфиденциальных идентификаторов.
GUID отлично подходит для того, для чего они предназначены: математически гарантированный уникальный идентификатор, который никогда не повторяется.
1218] Даже если взлом идентификатора сеанса стоит всего 1000 долларов, представьте, если это будет сделано 100 раз. Теперь вы говорите серьезно.
Я знаю, что это простой выход - использовать GUID, но сопротивляйтесь и справляйтесь с болью, принимая надлежащие меры предосторожности для адекватной защиты вашего приложения. Ваши пользователи будут вам благодарны.
Получить дубликат гида практически невозможно, учитывая возможность его получения. Вот несколько быстрых математических фактов
Песчинки в мире 75,000,000,000,000,000,000
Количество GUID 340,282,366,920,938,463,463,374,607,431,770,000,000