2009-10-05 8 views

Répondre

2

SELECT CHECKSUM(NEWID()) donne un entier signé de 32 basé sur les GUID. Vous pouvez l'utiliser comme base: il est à peu près la meilleure façon

SQL Vous pouvez l'utiliser pour semer RAND (parce que RAND est la même pour toutes les lignes en une seule sélection

SELECT RAND(CHECKSUM(NEWID())) 

A signé 64 bits. entier:

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

Avec un peu de jeu autour de vous pourriez lancer et/ou concaténer pour obtenir binaire (« multiples de 4 ») etc pour construire un tableau d'octets ... Je n'ai pas utilisé la RAND thingy mais pour émuler directement

+0

Cela répond à nos besoins car l'aléa crypto n'est pas l'objectif; le vrai but est d'obtenir de grands nombres aléatoires. Merci. –

1

Si vous devez générer cryptographycally secure random numbers (comme les sels pour le hachage), vous devez utiliser les fonctions CLR. La somme de contrôle, les guids et autres ne sont pas sécurisés pour les opérations de chiffrement.

La solution la plus simple consiste à utiliser un CLR scalar function qui appelle RNGCryptoServiceProvider. Notez que de nombreuses fonctions SQL Server comme EncryptByKey salent déjà l'entrée en utilisant des sels cryptographiquement sécurisés (à l'exception de EncryptByKey sur l'algorithme RC4, qui est rompu en SQL).

Questions connexes