guids的对称映射

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.

Eri*_*ert 6

你可以轻松地做到这一点:

Guid original = Guid.NewGuid();
byte[] encrypted = Encrypt(original, key);
Guid decrypted = Decrypt(encrypted, key);
Run Code Online (Sandbox Code Playgroud)

从ROT13开始,任何对称编码算法都可以.但是,这不是你要求的.您要求的是一种具有两个属性的算法:

  • 加密和解密算法完全相同.
  • GUID的加密形式也是有效的全局唯一标识符.

有许多算法,加密和解密过程是不同的,但实际上并不是很多,它们完全相同.加密和解密相同的最简单算法是:

  • 生成与明文长度相同的密码强度随机一次性填充.
  • 用垫子对明文进行XOR以产生密文.
  • 要解密,请使用填充对Xiphertext进行异或.

但是,该算法不一定保持密文是有效GUID的属性.

你能解释为什么你需要密文成为有效的GUID吗?GUID必须具有的属性是它必须是全局唯一的 ; 您打算如何保证全球唯一性?是什么阻止您将您生成的一个GUID加密到另一个其他人不知道的生成的GUID?

更一般地说,你能解释一下你试图解决的问题吗?十分之九,我看到有人试图使用密码术,他们将它用于错误的目的.