La mise en œuvre du RSA en C#
Je suis en train d'essayer de mettre en œuvre une classe permettant de gérer les communications sécurisées entre les instances de mon application en utilisant RSACrytoServiceProveider classe.
Première question : est-ce une bonne idée de mettre en œuvre une seule classe pour gérer émetteur-récepteur rôles ou devrais-je répartis les rôles dans les classes individuelles ?. C'est ce que j'ai fait jusqu'à présent:
using System;
using System.Text;
using System.Security.Cryptography;
namespace Agnus.Cipher
{
public class RSA
{
private byte[] plaintextBytes;
private byte[] ciphertextBytes;
private RSACryptoServiceProvider rSAProviderThis;
private RSACryptoServiceProvider rSAProviderOther;
public string PublicKey
{
get { return rSAProviderThis.ToXmlString(false); }
}
public RSA()
{
rSAProviderThis = new RSACryptoServiceProvider { PersistKeyInCsp = true };
plaintextBytes = Encoding.Unicode.GetBytes(PublicKey);
}
public void InitializeRSAProviderOther(string parameters)
{
rSAProviderOther.FromXmlString(parameters);
}
public byte[] Encrypt()
{
return rSAProviderThis.Encrypt(plaintextBytes, true);
}
public byte[] Decrypt()
{
return rSAProviderThis.Decrypt(ciphertextBytes, true);
}
public byte[] Sign()
{
using (SHA1Managed SHA1 = new SHA1Managed())
{
byte[] hash = SHA1.ComputeHash(ciphertextBytes);
byte[] signature = rSAProviderThis.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
return signature;
}
}
public void Verify()
{
throw new NotImplementedException();
}
}
}
Deuxième question : comment puis-je envoyer et recevoir des données à introduire dans la classe ? je suis un vert corne dans ce domaine, les pointeurs serait appréciée.
OriginalL'auteur gogole | 2008-12-21
Vous devez vous connecter pour publier un commentaire.
Je voudrais faire le chiffrer/signer/décrypter/vérifier les méthodes de prendre des paramètres pour les données, plutôt que d'avoir des variables de membre pour eux. Avoir des variables de membre pour la clé et le fournisseur semble ok si. Fondamentalement, je m'attends à utiliser la même clé plusieurs fois, mais pas les mêmes données.
Je voudrais aussi rendre immuable - faire de toutes les variables en lecture seule, en prenant tous les paramètres que vous aurez besoin pour les fournisseurs dans le constructeur au lieu d'avoir séparé l'initialisation de la méthode.
Au-delà de cela, il semble acceptable pour envelopper la fonctionnalité dans une API simple pour vos besoins si, oui.
OriginalL'auteur Jon Skeet
J'ai fait quelques ajustements, voici ce que la mise en œuvre ressemble:
les gars, vous n'avez rien dit au sujet de la façon dont la communication est prévue (je pense sockets). Merci de m'éclairer.
Pourquoi ne pas utiliser VerifyHash?
venir à penser que je devrais être à l'aide de VerifyHash(). Devrait me faire gagner quelques lignes de code.
OriginalL'auteur gogole
Je ne sais pas si cette capture de code peut vous aider, j'ai écrit ce code pour être en mesure de crypter et de décrypter avec de clé privée/publique paires dans divers crypting algortims et en l'absence de données pour chiffrer longueur problème, enfait RSA mise en œuvre .NET souffrir lorsque vous essayez de gérer plus de 250 (plus ou moins, désolé, je ne m'en souviens pas) octets de données.
Je viens de couper et de coller uniquement les méthodes de travail nécessaires, j'ai aussi coupé de la documentation xml cause n'est pas en anglais, si vous avez trouvé utile, faites le moi savoir, je peux poster tous les source de. Je le répète, je n'ai pas testé cette coupe&coller de la version, mais j'ai utilisé la version complète de cette classe, qui n'est pas différent.
BTW: il est en VB, mais si vous avez juste besoin de se cacher à elle que je pense que c'est assez 😉
OriginalL'auteur Andrea Celin
@gogole:
en fait, je ne pas utiliser des sockets, ce code est utilisé en stand alone façon avec les touches de la main-bringed.
Cependant, une fois que vous avez votre crypte mécanisme, vous êtes à plus de la moitié du voyage.
Ici il y a deux manquant méthodes pour créer des clés, comme vous l'avez demandé, le code est complet.
J'espère que vous avez trouvé ce utile
OriginalL'auteur Andrea Celin
Ne connaît pas beaucoup de vb, mais a tenté de convertir @Andrea Celin l'un de utile de Code en c#
OriginalL'auteur Raj