是否有现有的安全实现来实现以下目标:
Guid original = Guid.NewGuid();
Guid inverted = MysteryImplementation(original, salt); // salt is some sort of input
Guid shouldBeOriginal = MysteryImplementation(inverted, salt);
Assert.AreEqual(original, shouldBeOriginal, "MysteryImplementation did no work");
编辑:
由于这被否决(尽管我有点不确定为什么),我认为需要更多背景:
在很远的地方,有一个应用程序,其中主键存储为 GUID。在此应用程序中,这些 GUID 向 Web 客户端公开。
在我追求改善现状的过程中,我想到了将这些 GUID 与用户会话数据进行映射,以降低主键意外/恶意泄漏的风险。映射这些 GUID 具有额外的好处,它还可以更轻松地为这些 GUID 引用的对象实现工作副本。
这就是我决定开始寻找“安全”方式来映射 GUID 的原因。
回答评论:
- 与所有其他 GUID 相比,映射应该保持全局唯一性(我不希望那些映射的 GUID 与现有的 GUID 发生冲突)。
- 在这种情况下,“安全”意味着在不知道密钥的情况下应该不可能找出原始 GUID(一个典型的加密请求,我认为这意味着映射的 GUID 应该具有标准化分布)。