2012-09-17 30 views
0

當創建一個加密的字符串:有沒有辦法讓DESCryptoServiceProvider不使用加號等特殊字符?

using(var cryptoProvider = new DESCryptoServiceProvider()) 
    { 
     cryptoProvider.Key = Convert.FromBase64String(Key); 
     cryptoProvider.IV = Convert.FromBase64String(Key); 

     var encryptedString = cryptoProvider 
     .CreateEncryptor() 
     .TransformFinalBlock(serializedBytes, 0, serializedBytes.Length); 

     return Convert.ToBase64String(encryptedString); 

反正是有使用某些字符停止嗎?實際導致問題的字符是「+」號。當asp.net解碼並且(例如)+號變成空格時,問題就很明顯了。

可能會有其他字符會陷入同一問題,但+符號似乎是我遇到的唯一一個問題。有沒有辦法讓加密使用某個字符,或者在加密邏輯中防止這種加密?

回答

0

那麼,加密值在網址的使用,以避免所提到的URL編碼/解碼管理惡夢,使用

HttpUtilityServer.UrlTokenEncode/UrlTokenDecode 

照顧的呈現與使用的填充ASCII值的所有問題通過To64BaseString()。

1

不,您可以直接致電Url.Encode()生成的字符串。

1

這與加密和DES完全無關。

它是負責生成這些字符的Base64。由於只有62個字母數字ASCII字符,因此需要兩個字符才能獲得完整的64個字符。按照慣例,這兩個字符分別爲+/,填充字符使用=

如果需要,現在您可以用+/替換爲string.Replace,或者您可以在輸出上使用url編碼。

在我的具體情況
+0

我已經走了Url.Encode的路線已經導致我回到根源更多的管理頭痛的輸出。如果我想在+上進行替換,我可以使用什麼字符替代生成的輸出,我需要重新替換它,這不會自動導致相同的URL解碼問題? – pghtech