2013-04-04 12 views
0

我生成了一個令牌,它以字節爲單位轉換日期時間。 這裏是我生成令牌:如何防止在c中生成令牌時出現特殊字符

public string generateToken() 
    { 
     byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary()); 
     byte[] key = new Guid().ToByteArray(); 
     string token = Convert.ToBase64String(time.Concat(key).ToArray()); 
     return token; 
    } 

這是它的外觀時生成的標記,如:

chas42Sbo9AAAAAAAAAAAAAAAAAAAAA

但在一些日子裏它產生的特殊字符,太。就像這個例子:

chs2BiT/z0gAAAAAAAAAAAAAAAAAAAAA

我解析的鏈接結果重定向到另一個頁面

http://test.com/abo.aspx?chas42Sbo9AAAAAAAAAAAAAAAAAAAAA

與特殊字符它看起來像這樣:

http://test.com/abo.aspx?chs2BiT/z0gAAAAAAAAAAAAAAAAAAAAA

,這行不通。

是否可以生成一個令牌但沒有特殊字符?

+1

是否可以使用'HttpUtility.HtmlEncode()'來轉換斜槓? – DGibbs 2013-04-04 08:58:32

回答

1

這是如何Base64定義:

基部-64以升序位從零是大寫 字符「A」到「Z」中,小寫字符「a」到「z」的 數字「0」到「9」,以及符號「+」和「/」。無價值的 字符「=」用於結尾填充。

所以你不能使用Convert.ToBase64String如果你不想/角色出現在你的令牌。

+0

有沒有其他的選擇? – 2013-04-04 08:59:25

+0

爲什麼不只是使用GUID?當前日期在您的令牌中很重要嗎? – MarcinJuraszek 2013-04-04 09:00:01

+0

我需要檢查令牌是否24小時。 – 2013-04-04 09:00:36

相關問題