当前位置: 首页 > 编程语言 > C#

UnpredictableUniqueIdentifiers分享

时间:2023-04-10 19:32:46 C#

UnpredictableUniqueIdentifiers对于我正在开发的应用程序,我需要生成一个会话令牌,它必须具有以下属性:我正在考虑使用加密随机数来调整Guid结构,但这可能有点矫枉过正。有谁知道/创建适合所有这些属性的数据结构?让我非常清楚这一点。所有使用GUID的答案都是错误的,在任何情况下都不应该这样做。GUID规范中没有任何内容要求攻击者不可预测。如果按块分配,则允许GUID是连续的,允许使用非加密的强随机性创建GUID,并允许根据世界已知事实(例如MAC地址和当前时间)创建GUID。不要求GUID不可预测。如果您需要不可预测的会话密钥,请使用加密强度高的随机数生成器来生成具有足够位的密钥。更一般地说:使用正确的工具来完成工作,尤其是涉及到影响安全性的代码时。GUID旨在确保两家公司不会意外地向两个不同的界面提供相同的标识符。如果那是您的应用程序,请使用GUID。GUID的发明是为了防止良性实体发生事故,而不是为了保护无辜用户免受坚定的攻击者的侵害。GUID就像停车标志-防止意外碰撞,而不是攻击坦克。GUID的设计目的不是为了解决事故预防以外的任何问题,因此在任何情况下都不应使用它们来解决加密问题。使用专门为解决您的问题而设计的加密库,由世界一流的专家实施。您可以使用加密的RandomNumberGenerator,然后获取任意数量的字节以生成适当长度的标识符。RandomNumberGeneratorrng=RandomNumberGenerator.Create();byte[]bytes=newbyte[8];rng.GetBytes(字节);//生成类似“4jpKc52ArXU=”的字符串vars=Convert.ToBase64String(bytes);如何使用ASP.NET用于生成唯一的、不可预测的和安全的会话ID:usingSystem;使用System.IO;使用System.Web;使用System.Web.SessionState;类程序{staticvoidMain(){varrequest=newHttpRequest("","http://localhost","");varresponse=newHttpResponse(TextWriter.Null);varcontext=newHttpContext(request,response);varid=newSessionIDManager().CreateSessionID(context);控制台.WriteLine(id);如果你真的必须不可预测,那么生成一个GUID并使用128位混合器重新排列位。可能最好使用64位混音器来混合高音和低音部分。而且,是的,有些调音台可以保证每个独特的输入都有独特的输出。请注意,这并非完全不可预测。如果有人知道该值是一个模糊的GUID,他可能会检查连续的值,并且通过一些努力,可能会对您的位混合器进行逆向工程。以上就是C#学习教程:不可预测的唯一标识符共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: