2016-10-20 15 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); 
}