Как сгенерировать RNGCryptoServiceProvider-подобное число в TSQL - PullRequest
1 голос
/ 05 октября 2009

Кто-нибудь знает способ генерации случайного числа, подобного RNGCryptoServiceProvider, в T-SQL без необходимости регистрации каких-либо сборок .NET?

Ответы [ 2 ]

2 голосов
/ 05 октября 2009

SELECT CHECKSUM(NEWID()) дает 32-х целое число со знаком на основе идентификатора GUID. Вы можете использовать это как основу: это в значительной степени лучший способ SQL

Вы можете использовать его для заполнения RAND (поскольку RAND одинакова для всех строк в одном выделении.

SELECT RAND(CHECKSUM(NEWID()))

64-разрядное целое число со знаком:

SELECT CAST(CHECKSUM(NEWID()) as bigint) * CAST(CHECKSUM(NEWID()) as bigint)

С некоторой игрой вокруг вы можете разыграть и / или объединить, чтобы получить двоичный файл ("кратный 4") и т. Д. Для создания байтового массива ... Я не использовал RAND, хотя для подражать непосредственно

1 голос
/ 05 октября 2009

Если вам нужно генерировать криптографически безопасные случайные числа (например, соли для хеширования), вам следует использовать функции CLR. Контрольная сумма, направляющие и т. П. Не являются безопасными для операций шифрования.

Самое простое решение - использовать скалярную функцию CLR , которая вызывает RNGCryptoServiceProvider.

Обратите внимание, что многие функции crpto SQL Server, такие как EncryptByKey , уже собирают входные данные, используя сгенерированные криптографически безопасные соли (за исключением EncryptByKey для алгоритма RC4, который не работает в SQL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...