gpt4 book ai didi

c# - 如何在 2 个用户之间创建唯一 ID?

转载 作者:行者123 更新时间:2023-11-30 20:22:30 26 4
gpt4 key购买 nike

所以我一直在研究一个 C# 加密信使,它的加密/解密序列需要使用唯一的 45 个字符集。

我已经创建了一些作为演示,并且加密有效。但目前我正在添加一个登录系统。登录后,您会得到一个人员列表,与您交谈的每个人都会有一个唯一的对话 ID。

所以基本上,我想找到一种方法来创建此对话 ID,以便您添加的每次使用都不同,但如果其他用户添加您则相同。

例如:我添加了 Bob,对话的 ID 是:R4ToGdKknnFKZNucj8xvpoP30vagfhtIdyrrLnQG

目前如果Bob加我,ID会不一样。但我正在尝试找到一种方法,使它在 2 个用户之间相同,但在其他 2 个用户之间不同。

如果有人能提供帮助,那就太好了。我正在使用 CodeProject 提供的加密代码但根据我的需要进行了编辑。如果需要,我可以在这里发布代码。我正在使用 C# Windows 窗体应用程序。

最佳答案

假设用户名一致且唯一,您可以将它们的一些字符串组合转换为更适合作为 ID 的格式(例如此过程创建的 bigint):

string user1 = "daniel25";
string user2 = "kevin91";

var hashBuilder = new StringBuilder();
if (user1.CompareTo(user2) < 0)
{
hashBuilder.Append(user1);
hashBuilder.Append(user2);
}
else
{
hashBuilder.Append(user2);
hashBuilder.Append(user1);
}

var bytes = Encoding.Unicode.GetBytes(hashBuilder.ToString());
byte[] hashBytes;

using (var hasher = SHA1.Create())
{
hashBytes = hasher.ComputeHash(bytes);
}

long value = BitConverter.ToInt64(hashBytes, 12);
var uniqueHash = IPAddress.HostToNetworkOrder(value);

将该 ID 作为 bigint 存储在您的数据库中,您将拥有一个引用两个人之间对话的主键,并且也很容易索引和查找。

此方法有一些限制(例如用户“daniel25”和“kevin91”接收与“daniel”和“25kevin91”相同的哈希值),但我认为如果添加用户名“分隔符”可以解决这些问题不允许作为用户名字符。

var hashBuilder = new StringBuilder();
hashBuilder.Append(user1);
hashBuilder.Append("@");
hashBuilder.Append(user2);

此外,如果您只想使用真正的哈希,则无需转换为 Int64 - 您可以将 hashBytes 直接放入 nvarchar 字段中。

关于c# - 如何在 2 个用户之间创建唯一 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379447/

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