有没有人知道如何在T-SQL中生成类似RNGCryptoServiceProvider的随机数,而无需注册任何.NET程序集?
答案 0 :(得分:2)
SELECT CHECKSUM(NEWID())
根据GUID为您提供32个有符号整数。您可以使用它作为基础:它几乎是最好的SQL方式
您可以使用它来播种RAND(因为RAND对于单个选择中的所有行都是相同的。
SELECT RAND(CHECKSUM(NEWID()))
带符号的64位整数:
SELECT CAST(CHECKSUM(NEWID()) as bigint) * CAST(CHECKSUM(NEWID()) as bigint)
随着一些游戏你可以转换和/或连接以获得二进制(“4的倍数”)等来构建一个字节数组...我虽然没有使用兰德的东西直接模仿
答案 1 :(得分:1)
如果你必须生成cryptographycally secure random numbers(就像用于散列的盐),那么你应该使用CLR函数。校验和,guid等对于加密操作是不安全的。
最简单的解决方案是使用调用RNGCryptoServiceProvider的CLR scalar function。
请注意,许多SQL Server crpto函数(如EncryptByKey)已经使用加密安全生成的盐来对输入进行盐化(RC4算法上的EncryptByKey除外,这在SQL中已被破坏)。