2012-12-17 48 views
1

我有一些接受許可證加密密鑰的應用程序。所以這個應用程序應該保留在string encryptionPassword之內,以便解密該字符串並獲取一些數據。如何在應用程序中保留加密密碼?

哪個是最好的方法來保持string encryptionPassword在應用程序的內部,所以如果用戶會試圖破解它,它應該是非常困難的?

任何線索?

謝謝!!!

public static string Encrypt(string textToEncrypt, string encryptionPassword) 
{ 
      var algorithm = GetAlgorithm(encryptionPassword); 

      byte[] encryptedBytes; 
      using (ICryptoTransform encryptor = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV)) 
      { 
       byte[] bytesToEncrypt = Encoding.UTF8.GetBytes(textToEncrypt); 
       encryptedBytes = InMemoryCrypt(bytesToEncrypt, encryptor); 
      } 
      return Convert.ToBase64String(encryptedBytes); 
} 

public static string Decrypt(string encryptedText, string encryptionPassword) 
{ 
      var algorithm = GetAlgorithm(encryptionPassword); 

      byte[] descryptedBytes; 
      using (ICryptoTransform decryptor = algorithm.CreateDecryptor(algorithm.Key, algorithm.IV)) 
      { 
       byte[] encryptedBytes = Convert.FromBase64String(encryptedText); 
       descryptedBytes = InMemoryCrypt(encryptedBytes, decryptor); 
      } 
      return Encoding.UTF8.GetString(descryptedBytes); 
} 
+0

一個足夠確定的用戶將設法讀取這樣一個密碼 - 它可能需要時間和精力,但它是可能的。 – Oded

+3

另外 - 請參閱[SecureString](http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx)。 – Oded

+0

@Oded比你!但是我無法使用.NET 4.5 –

回答

5

SecureString可能適合該法案:

表示應當予以保密文本。該文本在使用時被加密以保護隱私,並在不再需要時從計算機內存中刪除。

另外:

SecureString對象類似於在於它具有一個文本值的String對象。但是,SecureString對象的值將自動加密,可以進行修改,直到應用程序將其標記爲只讀,並且可以由應用程序或.NET Framework垃圾收集器從計算機內存中刪除。

而且

SecureString一個實例的值在實例被初始化時或者當值被修改被自動加密。您的應用程序可以通過調用MakeReadOnly方法呈現實例不可變,並防止進一步修改。

注意,但是,AA確定足夠的用戶將設法讀這樣的密碼 - 它需要時間和精力,但將有可能

+0

很酷。但是我打算像'硬編碼'一樣保留'string encryptionPassword'。所以我猜想使用一些靜態數組來保存它的字符等等。所以,當應用程序可以檢測到有新的許可證字符串時,它應該自動解密它... –

+0

@Downvoter - 謹慎評論? – Oded

0

你應該嘗試使用安全字符串。它會自動加密內存中的字符串值。

1

存儲密鑰以防止黑客行爲的最佳答案是:您不需要

查看this article的替代方案。

該解決方案稱爲部分密鑰驗證系統,因爲您的軟件從不測試完整密鑰。由於您的應用程序不包含用於測試密鑰的每個部分的代碼,因此只有通過反彙編您的可執行代碼,破解者才能構建有效的密鑰生成器。

該系統不是完全防止裂紋的方法。破解者仍然可以編輯您的可執行文件以跳過驗證碼。但是這樣的破解只能在一個特定的版本上發揮作用,並且我會提出一些技巧來使他們的工作更難以成功完成。

相關問題