我正在使用SQL Server 2000中的一个数据库,该数据库为每个使用它所绑定的应用程序的用户使用GUID.不知何故,两个用户最终得到了相同的GUID.我知道微软使用一种算法来生成一个随机GUID,这个GUID极有可能导致碰撞,但是碰撞仍然可能吗?
我在.NetCore中找不到System.Security.Cryptography.RNGCryptoServiceProvider类.
对于我试图从.Net Framework移植的应用程序来说,这是必不可少的,因为它用于生成加密的初始化向量.
它是以不同的名称存在,还是有其他方式来实现此功能?
我的主键使用 guid。
如何对 GUID 进行排序?
我创建一个日期时间列并记录一个日期时间戳怎么样,然后我可以按日期时间排序?这是最好的方法吗?或者有更好的方法吗?
我需要生成在它们生成的所有机器上具有极高可能性的字符串,并且每次运行代码时都会有所不同.唯一的概率不一定是100%,这与安全无关,只有唯一性很重要(用例是播种大型非加密PRNG).
我目前的想法是SHA512散列网络适配器信息,包括适配器统计信息,计算机名称,进程ID,计算机运行时间(以滴答为单位)和UTC当前时间(以刻度表示),并将其转换为64个字符的基本64位Unicode字符串.
看起来声音,但有没有更好的,例如.net功能,如何做到这一点?
工作代码:
using System;
using System.Diagnostics;
using System.Net.NetworkInformation;
using System.Security.Cryptography;
using System.Text;
static class UniqueString
{
private static SHA512 sha = SHA512.Create();
public static string Gen()
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
StringBuilder uniqueString = new StringBuilder();
foreach (NetworkInterface adapter in adapters)
{
IPInterfaceStatistics stats = adapter.GetIPStatistics();
uniqueString.AppendFormat("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} ",
adapter.Description,
adapter.Id,
adapter.Name,
adapter.Speed,
adapter.GetPhysicalAddress(),
adapter.NetworkInterfaceType,
stats.BytesReceived,
stats.BytesSent,
stats.IncomingPacketsDiscarded,
stats.IncomingPacketsWithErrors,
stats.IncomingUnknownProtocolPackets,
stats.NonUnicastPacketsReceived,
stats.NonUnicastPacketsSent, …
Run Code Online (Sandbox Code Playgroud)