对于我正在处理的应用程序,我需要生成一个必须具有以下属性的会话令牌:
我正在考虑使用加密随机数来调整Guid结构,但这可能是一种过度杀伤力.有人知道/创建了适合所有这些属性的数据结构吗?
Eri*_*ert 28
让我在这一点上非常清楚.所有使用GUID的答案都是错误的,在任何情况下都不应该这样做.
GUID规范中没有任何内容要求攻击者无法预测.如果以块分配,则允许GUID是顺序的,允许使用非加密强度随机性创建GUID,并且允许根据关于世界的已知事实创建GUID,例如MAC地址和当前时间. 没有任何要求GUID是不可预测的.
如果您需要一个不可预测的会话密钥,那么使用加密强度随机数生成器生成一个密钥以生成足够多的位.
更一般地说:使用正确的工具来完成工作,特别是在涉及影响安全性的代码时.GUID旨在确保两家公司不会意外地将相同的标识符提供给两个不同的接口.如果那是您的应用程序,请为其使用GUID.发明GUID是为了防止良性实体发生意外,而不是为了保护无辜用户免受坚决的攻击者.GUID就像停车标志 - 防止意外碰撞,防止攻击坦克.
GUID 并非旨在解决除事故预防之外的任何问题,因此在任何情况下都不要使用它们来解决加密问题.使用专门为解决您的问题而设计的加密库,由世界一流的专家实施.
您可以使用加密的 RandomNumberGenerator,然后获取要生成适当长度的标识符的许多字节.
RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] bytes = new byte[8];
rng.GetBytes(bytes);
// produces a string like "4jpKc52ArXU="
var s = Convert.ToBase64String(bytes);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |