有没有人知道一种不用注册任何.NET程序集就能在T-SQL中生成类似RNGCryptoServiceProvider的随机数的方法?
发布于 2009-10-05 19:27:42
SELECT CHECKSUM(NEWID())根据GUID给出了一个32带符号的整数。您可以将其用作基础:这几乎是最好的SQL方式
您可以使用它来设定RAND的种子(因为RAND对于单个select中的所有行都是相同的。
SELECT RAND(CHECKSUM(NEWID()))有符号64位整数:
SELECT CAST(CHECKSUM(NEWID()) as bigint) * CAST(CHECKSUM(NEWID()) as bigint)通过一些尝试,您可以转换和/或连接以获得二进制(“4的倍数”)等,以构建字节数组……我没有使用RAND之类的东西来直接模拟
发布于 2009-10-05 19:45:11
如果您必须生成cryptographycally secure random numbers (就像用于散列的盐),那么您应该使用CLR函数。校验和、guids等对于加密操作是不安全的。
最简单的解决方案是使用调用RNGCryptoServiceProvider的CLR scalar function。
请注意,许多SQL Server crpto函数(如EncryptByKey )已经使用加密安全生成的盐对输入进行了加盐(除了EncryptByKey on RC4算法,这在SQL中是无效的)。
https://stackoverflow.com/questions/1521835
复制相似问题