相关疑难解决方法(0)

加密单个int的方法

你怎么能廉价地双向加密一个32位的int,这样每个数字都映射到那个空间中的其他int并以一种难以预测的方式返回?

当然,并不需要在映射表中预先存储42.9亿个整数.

language-agnostic encryption algorithm

9
推荐指数
3
解决办法
8547
查看次数

通过算法从用户 ID 生成唯一的随机朋友代码

我正在寻找一种方法来从一个连续的用户 ID 中为用户生成一个随机的、唯一的 9 位朋友代码。这背后的想法是,人们无法通过一一搜索好友代码来枚举用户。如果有 1000 个可能的代码和 100 个注册用户,搜索随机代码应该有 10% 的机会找到用户。

一种可能的方法是随机生成一个代码,检查该代码是否已被使用,如果是,则再试一次。我正在寻找一种方法(主要是出于好奇),其中朋友代码是通过算法生成的,并且第一次尝试时保证该用户 ID 是唯一的。

具体来说,给定一个数字范围(1 到 999,999,999),在这个数字上运行该函数应该返回同一范围内的另一个数字,该数字与输入数字成对且唯一。只有当范围发生变化和/或随机性的输入种子发生变化时,这种配对才会有所不同。

理想情况下,个人不应该在不知道种子和算法的情况下(或者拥有非常大的样本池和大量时间 - 这不需要加密安全)轻松地从朋友 ID 逆向工程用户 ID,所以简单地从最大范围中减去用户 ID 不是一个有效的解决方案。

下面是一些 C# 代码,它通过生成整个数字范围、打乱列表,然后通过将用户 ID 视为列表索引来检索朋友 ID 来完成我所追求的目标:

int start = 1; // Starting number (inclusive)
int end = 999999999; // End number (inclusive)
Random random = new Random(23094823); // Random with a given seed

var friendCodeList = new List<int>();
friendCodeList.AddRange(Enumerable.Range(start, end + 1)); // Populate list

int n = friendCodeList.Count;

// Shuffle the list, this …
Run Code Online (Sandbox Code Playgroud)

c# random algorithm math guid

3
推荐指数
1
解决办法
379
查看次数

标签 统计

algorithm ×2

c# ×1

encryption ×1

guid ×1

language-agnostic ×1

math ×1

random ×1