2014-03-30 34 views
0

我需要一個C#方法來加密一個整數爲一個由5個字符組成的字符串,其中有效字符是az,AZ,0-9如何將整數加密爲五個字符的字符串?

我需要這樣做是因爲我正在向這樣的用戶發送URL。 。

http://www.website.com.au/3 

用戶將在此URL中看到特定於他們的數據。該數據不超敏感,但它只是通過輸入下一個數字被視爲不可接受,查看別人的廣播:

http://www.website.com.au/4 

但是也有必要保持URL的短期和可讀性的URL可能達到你發短信時,我們不希望通過大規模長加密值鬆動短信空間,以便

http://www.website.com.au/3 

有可能成爲

http://www.website.com.au/a6Yqo 

我知道這加密級別相當薄弱,但對於這些廣播已足夠好了

public string Encrypt(int number) 
{ 
} 

public int Decrypt(string encrypted) 
{ 
} 

我從哪裏開始?

+0

是可能的至少2個字符添加到有效字符?使用64而不是62個字符可以讓你使用base 64.請注意,最大限度地支持略低於bilion的單獨消息。 –

+0

如果你可以接受6個字符,你可以使用一個像skip魚一樣的32位塊密碼。 – CodesInChaos

+0

我剛剛在https://github.com/eleven41/Eleven41.Skip32上看過skip32。不錯,因爲它返回一個9位整數作爲加密值。寧願它更短,但我想它更安全,我可能能夠與9位數生活 – Petras

回答

0

創建一個將「散列」映射到「資源」的表格。 「散列」是您將發送給您的用戶的字母數字,「資源」是某種標識符(您的案例中的數字),可以讓您找到並提供適當的資源。

當你需要發送一個新的url給某個用戶時,只需要生成一個隨機的所需長度的「散列」並使用該表來檢查它是否是唯一的。

1

不正是你所需要的,但會做的工作

public static string Encrypt(int value) 
    { 
     return Convert.ToBase64String(BitConverter.GetBytes(value)).Replace("==",""); 
    } 

    public static int Decrypt(string value) 
    { 
     if(value.Length!=6) 
      throw new ArgumentException("Invalid length."); 

     return BitConverter.ToInt32(Convert.FromBase64String(value + "=="),0); 
    } 

結果:

0 : AAAAAA 

1 : AQAAAA 

2 : AgAAAA 

3 : AwAAAA 

4 : BAAAAA 

5 : BQAAAA 

6 : BgAAAA 

7 : BwAAAA 

8 : CAAAAA 

9 : CQAAAA 

10 : CgAAAA 

11 : CwAAAA 

12 : DAAAAA 

13 : DQAAAA 

14 : DgAAAA 

15 : DwAAAA 

16 : EAAAAA 

17 : EQAAAA 

18 : EgAAAA 

19 : EwAAAA 

20 : FAAAAA 

21 : FQAAAA 

22 : FgAAAA 

23 : FwAAAA 

24 : GAAAAA 
+1

Base-64編碼是*不*加密。這提供了零安全性,因爲Base64很難識別和反向。 – Dai

相關問題