gpt4 book ai didi

c# - 如何混淆整数?

转载 作者:行者123 更新时间:2023-12-02 15:30:28 25 4
gpt4 key购买 nike

我需要根据 C# 中的整数列表生成唯一值列表。我以为是 MD5 或类似的,但它们生成的字节太多。

整数大小为 2 个字节。

我想得到一个单向通信,例如

0 -> ARY812Q3
1 -> S6321Q66
2 -> 13TZ79K2

因此,在证明散列时,用户无法知道整数或干扰散列列表后面的序列。

现在,我尝试使用 MD5(我的号码),然后我使用了前 8 个字符。但是,我在 51389 处发现了第一次碰撞。我还可以使用哪些其他替代方案?

正如我所说,我只需要一种方法。没有必要能够从散列中计算出整数。系统使用字典来查找它们。

更新:

回复一些关于使用GetHashCode()的建议。 GetHashCode 返回相同的整数。我的目的是向最终用户隐藏整数。在这种情况下,整数是数据库的主键。我不想将此信息提供给用户,因为他们可以推断出数据库中的记录数或每周记录的增量。

哈希不是唯一的,所以我可能需要使用像 TripleDes 这样的加密,但我想使用一些快速和简单的东西。此外,TripleDes 也返回太多字节。

更新 2:我在谈论哈希,这是一个错误。实际上,我试图混淆它,我尝试使用哈希算法,这不是一个好主意,因为它们不是唯一的。

最佳答案

2017 年 5 月更新

随意使用(或修改)我开发的库,可通过 Nuget 安装:

Install-Package Kent.Cryptography.Obfuscation

这会将一个非负 ID(如 127)转换为 8 个字符的字符串,例如xVrAndNb,然后返回(使用一些可用选项在每次生成序列时随机化序列)。

示例用法

var obfuscator = new Obfuscator();
string maskedID = obfuscator.Obfuscate(15);

完整文档位于:Github .


旧答案

我以前遇到过这个问题,但我在 StackOverflow 中找不到我想要的东西。所以我制作了这个混淆类并在 github 上分享了它。

Obfuscation.cs - Github

您可以通过以下方式使用它:

Obfuscation obfuscation = new Obfuscation();
string maskedValue = obfuscation.Obfuscate(5);
int? value = obfuscation.DeObfuscate(maskedValue);

也许对 future 的访客有帮助:)

关于c# - 如何混淆整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27176650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com