我希望生成唯一的ID来识别我的系统中的一些数据.我正在使用一个精心设计的系统,它将一些(非唯一的,相关的)元数据与System.Guid.NewGuid()连接起来.这种方法有什么缺点,还是我明白了?
您建议以哪种方式在和中创建安全密码重置链接?我的意思是,我会创建一个随机令牌,对吧?如何在发送给用户之前对其进行编码?是MD5不够好?你知道其他任何安全方式吗?MVCC#
我正在使用ROA(面向资源的架构)设计RESTful Web服务.
我正在尝试找出一种有效的方法来保证在服务器指定资源密钥的情况下创建新资源的PUT请求的幂等性.
根据我的理解,传统方法是创建一种类型的事务资源,例如/ CREATE_PERSON.用于创建新人员资源的客户端 - 服务器交互将分为两部分:
步骤1:获取用于创建新PERSON资源的唯一事务ID :::
**Client request:**
POST /CREATE_PERSON
**Server response:**
200 OK
transaction-id:"as8yfasiob"
Run Code Online (Sandbox Code Playgroud)
第2步:使用事务ID :::在保证唯一的请求中创建新的人员资源
**Client request**
PUT /CREATE_PERSON/{transaction_id}
first_name="Big bubba"
**Server response**
201 Created // (If the request is a duplicate, it would send this
PersonKey="398u4nsdf" // same response without creating a new resource. It
// would perhaps send an error response if the was used
// on a transaction id non-duplicate request, but I have
// control over the client, so I can …Run Code Online (Sandbox Code Playgroud) 我在这里找到问题:
答案提供了以下JS:
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
Run Code Online (Sandbox Code Playgroud)
现在,这对我来说似乎有些愚蠢。为什么要这么重复?我计划使用此名称来命名要上传到服务器的文件,以使它们不会彼此覆盖。看起来它不会总是生成一个唯一的数字。
上面的代码有什么好处呢math.random()?它甚至不会改变种子。
抱歉,我从来没有使用过GUID / UUID,并且某些代码对我来说真的没有任何意义...
澄清说明
很多人没有像我问的那样回答这个问题。很多人在解释GUID并不总是唯一的,等等等等。那不是我要的 我在问,在just上使用它有什么意义math.random()?
乔在评论中似乎为我提供了最佳答案。
我之前曾问过类似的问题,但我现在正在减少对我需要的一些限制.
我需要在C#上有效地在计算机上找到唯一的标识符.它应该始终在任何特定的计算机上保持不变,并且可以是许多因素的组合 - 只要它易于检索.
我曾考虑将MAC地址与WMI网络查询一起使用,但这通常有10个以上的适配器.使用WHERE IPEnabled = true子句可能会更好,但我认为可能还有更好的东西.
想法?
(PS它不一定非常独特.只要碰撞的机会很小,它就是完美的.)
我正在尝试找到可能比 SHA256 更快的东西。我有超过 10 亿条记录需要散列并验证它们是否唯一。我目前正在通过 MD5 运行它,它看起来很快,然后通过 sha256 以避免冲突。按照这个顺序运行它们似乎给了我一点性能提升,但我仍然需要它更快。我正在寻找在 c# 或一些伪代码中完成的一些哈希的名称或示例,以便我可以在 c# 中重新创建它。
给定两个GUID,A和B,我执行C = A ^B。结果是GUID吗?
(如果是这样,我可以使用它代替生成第三个guid来表示包含由A和B表示的两个对象的对象。)
我需要生成在它们生成的所有机器上具有极高可能性的字符串,并且每次运行代码时都会有所不同.唯一的概率不一定是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) GUID是MSFT生成的128位唯一标识符.
我怀疑GUID是否是全球唯一的.我的意思是我生成的GUID,在任何系统中使用任何应用程序的人都没有其他人可以生成?真的吗?
我很惊讶微软如何知道或追踪这种独特性.
而且生成的uniquie GUID可以链接到任何实体吗?应用,变量,系统,?
GUOD所有实体可以链接到什么?任何人都可以澄清GUID的概念吗?编程语言是独立的吗?
c# ×5
guid ×3
asp.net-4.0 ×1
asp.net-mvc ×1
c++ ×1
coding-style ×1
cryptography ×1
hash ×1
idempotent ×1
javascript ×1
math ×1
md5 ×1
registry ×1
rest ×1
security ×1
sha256 ×1
uuid ×1
windows ×1
xor ×1