首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TSQL中生成类似RNGCryptoServiceProvider的数字

问如何在TSQL中生成类似RNGCryptoServiceProvider的数字
EN

Stack Overflow用户
提问于 2009-10-05 19:09:43
回答 2查看 1.5K关注 0票数 1

有没有人知道一种不用注册任何.NET程序集就能在T-SQL中生成类似RNGCryptoServiceProvider的随机数的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-05 19:27:42

SELECT CHECKSUM(NEWID())根据GUID给出了一个32带符号的整数。您可以将其用作基础:这几乎是最好的SQL方式

您可以使用它来设定RAND的种子(因为RAND对于单个select中的所有行都是相同的。

代码语言:javascript
复制
SELECT RAND(CHECKSUM(NEWID()))

有符号64位整数:

代码语言:javascript
复制
SELECT CAST(CHECKSUM(NEWID()) as bigint) * CAST(CHECKSUM(NEWID()) as bigint)

通过一些尝试,您可以转换和/或连接以获得二进制(“4的倍数”)等,以构建字节数组……我没有使用RAND之类的东西来直接模拟

票数 2
EN

Stack Overflow用户

发布于 2009-10-05 19:45:11

如果您必须生成cryptographycally secure random numbers (就像用于散列的盐),那么您应该使用CLR函数。校验和、guids等对于加密操作是不安全的。

最简单的解决方案是使用调用RNGCryptoServiceProvider的CLR scalar function。

请注意,许多SQL Server crpto函数(如EncryptByKey )已经使用加密安全生成的盐对输入进行了加盐(除了EncryptByKey on RC4算法,这在SQL中是无效的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1521835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档