Fdr*_*Fdr -1 c# algorithm encryption-symmetric
是否存在以下安全实现:
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的原因.
回答评论:
-Mapping应该与所有其他GUID相比保留全局唯一性(我不希望那些映射的GUID与现有的GUID冲突).
- 在此上下文中的"安全"意味着在不知道密码密钥(典型的加密请求,我认为转换映射的GUID应该具有规范化分布)的情况下,不可能找出原始GUID.
你可以轻松地做到这一点:
Guid original = Guid.NewGuid();
byte[] encrypted = Encrypt(original, key);
Guid decrypted = Decrypt(encrypted, key);
Run Code Online (Sandbox Code Playgroud)
从ROT13开始,任何对称编码算法都可以.但是,这不是你要求的.您要求的是一种具有两个属性的算法:
有许多算法,加密和解密过程是不同的,但实际上并不是很多,它们完全相同.加密和解密相同的最简单算法是:
但是,该算法不一定保持密文是有效GUID的属性.
你能解释为什么你需要密文成为有效的GUID吗?GUID必须具有的属性是它必须是全局唯一的 ; 您打算如何保证全球唯一性?是什么阻止您将您生成的一个GUID加密到另一个其他人不知道的生成的GUID?
更一般地说,你能解释一下你试图解决的问题吗?十分之九,我看到有人试图使用密码术,他们将它用于错误的目的.