2016-10-20 25 views
-2

我们希望生成优惠券代码系列,然后使用数字对这些优惠券代码进行加密,并且还必须能够解密。想要生成数字优惠券代码?

我们将与客户共享加密的代码作为优惠券代码。

这些条件:

  1. 加密代码不能在系列或不容易猜到。它必须是NUMERIC
  2. 加密的代码必须具有特定的位数。

实施例:

我们产生从1到100的优惠券代码(需要以百万和plainCode将是数字或字母数字并不重要)。

我们希望将具有特定数字的加密数字优惠券代码共享给用户。 即,如果代码是52,那么加密的代码给我们在10000到99999之间(如果指定了5位数或它需要是固定的位数)

我们也能解密它。

如何做到这一点。任何想法或建议?

谢谢。

注:

  1. 上面只是一个例子。可能性在数百万。
  2. 安全性不是主要问题。只是无法猜测事情很多。
  3. 加密的代码必须是数字。
+0

可以生成UUID和编码解码 –

+0

*“如果代码是52,然后加密的代码为我们提供了10000至99999” * - 这已经安全只有**你知道这些值与52有关。为什么不使用查找表只有100种可能性。 –

+1

如果您只有100张优惠券,只需为每个优惠券选择一个不同的随机“加密”号码即可。如果只有您将表格从“加密”映射回“解密”的数字,它基本上是牢不可破的(除了橡胶软管密码或简单的疏忽)。 –

回答

0

如果安全不是你的关心...

int key=123456; 

List<int> availableNumbers=new List<int>(); 
for(int i=10000;i<100000;i++) 
    availableNumbers.Add(i); 

Dictionary<int,int> forwards=new Dictionary<int,int>(); 
Dictionary<int,int> backwards=new Dictionary<int,int>(); 

for(int i=1;i<1000;i++){ 
    var rnd=new System.Random(key+i); 
    int pos=rnd.Next(availableNumbers.Count); 
    int number=availableNumbers[pos]; 
    availableNumbers.RemoveAt(pos); 
    forwards[i]=number; 
    backwards[number]=i; 
} 

foreach(var kvp in forwards) 
{ 
    Console.Out.WriteLine("{0,5}=>{1}",kvp.Key,kvp.Value); 
}