【问题标题】:Generate another Guid using one Guid and vice versa使用一个 Guid 生成另一个 Guid,反之亦然
【发布时间】:2019-02-19 18:27:31
【问题描述】:

有没有一种方法/算法/方法可以使用我们的旧 GUId (y) 生成一个新的 Guid (x),然后在我们需要时从 x 中取回 y?

类似于以下答案的内容,但它显示了一种将旧 Guid(我可以将其视为字符串)转换为 Guid 但不是返回方式的方法。

https://stackoverflow.com/a/9386095/5887074

How can I generate a GUID for a string?

P.S.:这与任何安全性无关。这两个 Guid 将仅用于从表中查找记录。如果需要,我们可以在此转换中将 Guid 转换为字符串。

【问题讨论】:

  • 我不明白你的意思是从旧的生成新的 GIUD,你想要一个给定旧的 GUID 的功能,你可以找到新的吗?
  • 是的,但是我应该能够反之亦然,就像我应该能够使用新的 Guid 获得旧的 Guid。
  • 好吧,这无法做到,但我正在写一个如何实现相同目标的答案。
  • 您想要一个包含两列的表格来链接 GUID?
  • 我是说你需要一个表来用作查找。

标签: c#


【解决方案1】:

有数千种方法:一个 guid 是 128 位,因此您可以翻转一位,这样可以很容易地来回翻译。或者你可以做模 42 并使其 看起来 好像你做了一些不可预测的事情。或者,您可以颠倒位的顺序,对所有位执行 NOT 操作,或者通过某种预定义的模式重新排列位。

但我怀疑您有一个未定义的用例。请详细说明您要解决的问题。您的请求听起来有点危险,因为听起来好像您想在看似不相关的实体之间启用某种跟踪。如果涉及到一些安全问题,如果明文(guid 预翻译)和密码(guid 翻译后)都是公开的,那么您很可能会弄错。也许简单的 AES 加密足以作为翻译功能,但我认为您需要更详细地指定您的问题以获得有用的答案。

【讨论】:

  • 这与任何安全性无关。这两个 Guid 将仅用于从表中查找记录。每个 Guid 将与一个事务相关。我们只是想通过使用根据之前的 Guid 生成的新的 Guid 来找到相关的交易。
  • 太棒了。但我认为建议关联数组的 cmets 之一实际上是最好的解决方案。 Guid 的构造是为了避免冲突,但是如果您从另一个 guid 派生一个 guid,则此属性将消失:为了论证,请采用(愚蠢的)翻转方法。它适用于第一个派生位,但如果您需要另一个派生,它将成为原始 guid。这将类似于链接 guid 的其他功能。关联两个完全随机的 guid 将保留非冲突属性。
  • 但是,如果您真的需要没有直接关联的链接 guid,我 一个好的功能是 AES 加密 guid 并使用关联 guid 的加密值。转换是加密和解密的问题,AES 应该对输入进行确定性但接近随机的转换。但我仍然会担心与其他向导发生冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2021-04-05
  • 2017-10-16
  • 2022-11-04
  • 2011-03-11
相关资源
最近更新 更多