2013-01-24 77 views
0

我目前有一套AES加密/解密函數,我在ASP.NET中使用它們來滿足我所有的加密需求。然後,我將這些數據在應用程序中來回傳遞給另一個我無法控制的安全應用程序。所有內容都以字符串形式發送,字符串通過ASCII編碼發送到這些應用程序或從這些應用程序發送。使用ASCII編碼(ASP.NET)進行加密與使用UTF-8編碼進行加密(Silverlight)

現在我正在使用預先存在的Silverlight應用程序,在那裏我需要爲數據添加加密/解密功能,但我仍將發送到其他安全應用程序(我無法控制)使用ASCII編碼。由於Silverlight使用UTF-8,這看起來可能是一個問題。我對編碼有足夠的瞭解,知道ASCII和UTF-8是如何相似和不同的(每個中的0到127是相同的,但UTF-8有更多的字符)。如果我打算使用ASCII嚮應用程序發送/接收數據,那麼在我的一端使用UTF-8進行加密/解密是否存在風險? (我的應用程序不會被加密之前,使用任何非標字符)

而且,我應該:

  1. 使用Silverlight中的服務引用有我的ASCII加密/解密功能? OR
  2. 在Silverlight應用程序中使用UTF-8加密/解密,不需要服務參考?
+0

爲什麼使用ASCII而不是UTF-8? – CodesInChaos

+0

我上面說的第三方使用了這種編碼,因爲它們非常不靈活並且很難處理,並且它在.NET中很容易獲得,我們也是如此。 – rownage

回答

1

,而它的壞從國際化的角度來看,如果能夠合理地確保您的輸入將是隻有在正常的ASCII字符的範圍,你應該不會有問題。

您可以添加this SO answer中的代碼,爲您提供一些額外的保護 - 將非ASCII安全UTF-8字符轉換爲'?',返回可加入您的加密方法的字節數組。

+0

那麼我的UTF-8加密沒有可能導致加密字符串中出現非ASCII字符的機會? – rownage

+0

如果您使用鏈接中的代碼,它將保證傳入您的加密方法的明文是完全ASCII字符。也就是說,它保證通過將所有非ASCII字符轉換爲'?',但是如果你沒有很多用戶試圖在你的應用中輸入奇怪的unicode字符,你應該沒問題。 –

+0

對,我明白,但是如果在密文中出現非ASCII字符呢?就像我有字符串「狗」,並使用UTF-8進行加密一樣,難道它最終不會像「e45gØ」那樣?這會導致解密在另一端失敗,即使我將'Ø'替換爲'?',對吧? – rownage