2012-09-17 5 views
0

Cette fonction est la classe actuelle. Comment puis-je l'appeler?Comment appeler une fonction

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); 
      } 
     } 
} 

Répondre

2

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

par exemple ?!

voir hiérarchie d'héritage @http://msdn.microsoft.com/en-en/library/system.security.cryptography.symmetricalgorithm.aspx

+0

Il donne l'erreur « System.Security.Cryptography.Aes 'doit être un type non-abstrait avec un constructeur public sans paramètre afin de l'utiliser comme paramètre' TSymmetricAlgorithm 'dans le type ou la méthode générique – Manjoor

+0

ah! SRY! try 'System.Security.Cryptography.AesManaged' vor exemple vérifiez la hiérarchie d'héritage donnée pour choisir l'algorithme correct ... C'est une méthode générique qui construit un nouvel objet de la classe SymmetricAlgorithm choisie pour crypter les choses. – TheHe

+0

pourquoi ne savez-vous pas quel algorithme utiliser?! c'est ton code ... – TheHe

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

Je vous suggère de penser à une approche légèrement différente aussi:

string EncryptText(SymmetricAlgorithm algo, string input); 

L'inconvénient est que le consommateur à se soucier de créer des instances de l'algorithme. Vous pouvez cependant utiliser des implémentations sans constructeurs sans param. De plus, vous pouvez réutiliser des instances aussi.

Il est préférable de décider ce qui convient le mieux à votre code.

+0

;) Je suppose que notre code ressemble à peu près les mêmes – blindmeis

+0

Merci .. Il me aide beaucoup .. – Manjoor

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