2012-09-17 102 views
0

這一個函數是當前類。我怎樣稱呼它?如何調用函數

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //------ 
     //------ 

     String r = EncryptText<Cryptography.Aes>(myTextStringToEncode); 
    } 
     private string EncryptText<TSymmetricAlgorithm>(string input) where TSymmetricAlgorithm : SymmetricAlgorithm, new() 
     { 
      var pwdBytes = Encoding.UTF8.GetBytes("MY560Secratekey38433661283912"); 
      using (TSymmetricAlgorithm sa = new TSymmetricAlgorithm()) 
      { 
       ICryptoTransform saEnc = sa.CreateEncryptor(pwdBytes, pwdBytes); 

       var encBytes = Encoding.UTF8.GetBytes(input); 

       var resultBytes = saEnc.TransformFinalBlock(encBytes, 0, encBytes.Length); 

       return Convert.ToBase64String(resultBytes); 
      } 
     } 
} 

回答

2

EncryptText<System.Security.Cryptography.Aes>("hello world")

例如?

看到繼承層次@http://msdn.microsoft.com/en-en/library/system.security.cryptography.symmetricalgorithm.aspx

+0

提示錯誤「System.Security.Cryptography.Aes '必須是一個具有公共無參數構造函數的非抽象類型,以便將其用作通用類型或方法中的參數'TSymmetricAlgorithm' – Manjoor

+0

啊! SRY! 嘗試'System.Security.Cryptography.AesManaged' VOR例如 檢查給定繼承層次選擇正確的算法... 這是它構造的選擇SymmetricAlgorithm級的新對象的東西進行加密的通用方法。 – TheHe

+0

爲什麼你不知道使用哪種算法?!這是你的代碼... – TheHe

2
var result = EncryptText<MySymmetricAlgorithm>("my input"); 

我建議你考慮一個稍微不同的方法太:

string EncryptText(SymmetricAlgorithm algo, string input); 

的缺點是,消費者不必擔心產生算法的實例。不過,您可以使用不帶no-param構造函數的實現。而且,你也可以重用實例。

最好決定什麼最適合您的代碼。

+0

;)我猜我們的代碼看起來幾乎相同 – blindmeis

+0

謝謝..它幫助了我很多.. – Manjoor

1
var result = this.EncryptText<MySymmetricAlgorith>("blup");