
Bibliothèque d'encapsulation cryptographique simple et saine.
Le package NuGet AdvSim.Cryptography contient un ensemble de fonctions d’encapsulation cryptographiques réutilisables, configurées avec des valeurs par défaut raisonnables et faciles à utiliser. Plus de détails sont disponibles sous les différentes sous-rubriques ci-dessous.
Le package NuGet AdvSim.Cryptography prend en charge une grande variété de versions de .Net. En général, les fonctions incluses dans la bibliothèque offrent une bonne couverture des frameworks cibles. Lorsque certaines fonctions sont restreintes à des frameworks spécifiques, un badge a été ajouté pour mettre en évidence cette dépendance.
NuGet URL: https://www.nuget.org/packages/AdvSim.Cryptography
Lorsque le matériel de clé est fourni dans le constructeur cryptographique, Rfc2898DeriveBytes est utilisé pour renvoyer des tableaux d’octets pseudo-aléatoires afin d’initialiser les opérations de chiffrement et de déchiffrement. Ces tableaux d’octets sont de haute qualité tout en garantissant que l’appel de la même fonction avec le même matériel de clé produira la même graine pseudo-aléatoire.
Cette fonction prend un tableau d’octets et le chiffre ou le déchiffre à l’aide du matériel de clé fourni dans le constructeur. À la fin, elle renvoie un tableau d’octets.
AES test = new AES("Lovecraft");
Byte[] bEncrypted = test.Encrypt(bTestData);
Byte[] bDecrypted = test.Decrypt(bEncrypted);
Cette fonction prend un tableau d’octets et le chiffre ou le déchiffre à l’aide du matériel de clé fourni dans le constructeur. À la fin, elle renvoie un tableau d’octets.
TripleDES test = new TripleDES("Lovecraft");
Byte[] bEncrypted = test.Encrypt(bTestData);
Byte[] bDecrypted = test.Decrypt(bEncrypted);
Cette fonction prend un tableau d’octets et le chiffre ou le déchiffre à l’aide du matériel de clé fourni dans le constructeur. À la fin, elle renvoie un tableau d’octets.
RC4 test = new RC4("Lovecraft");
Byte[] bEncrypted = test.Encrypt(bTestData);
Byte[] bDecrypted = test.Decrypt(bEncrypted);
Cette fonction prend un tableau d’octets et le chiffre ou le déchiffre à l’aide du matériel de clé fourni dans le constructeur. À la fin, elle renvoie un tableau d’octets.
RC2 test = new RC2("Lovecraft");
Byte[] bEncrypted = test.Encrypt(bTestData);
Byte[] bDecrypted = test.Decrypt(bEncrypted);
Cette fonction prend un tableau d’octets et le chiffre ou le déchiffre à l’aide du matériel de clé fourni dans le constructeur. À la fin, elle renvoie un tableau d’octets.
MultiXOR test = new MultiXOR("Lovecraft");
Byte[] bEncrypted = test.Encrypt(bTestData);
Byte[] bDecrypted = test.Decrypt(bEncrypted);
Cette fonction prend un tableau d’octets et le chiffre ou le déchiffre à l’aide du matériel de clé fourni dans le constructeur. À la fin, elle renvoie un tableau d’octets.
XTEA test = new XTEA("Lovecraft");
Byte[] bEncrypted = test.Encrypt(bTestData);
Byte[] bDecrypted = test.Decrypt(bEncrypted);
Notez ici qu’en v2.0.0, ECDH est pris en charge sur toutes les versions de .Net disponibles dans le package NuGet. Cependant, en raison de décisions de conception .Net vraiment discutables, l’interopérabilité entre toutes les cibles prises en charge n’est pas triviale.
Par conséquent, il existe des différences d’implémentation entre Framework < .Net 4.7 et tout le reste. Les deux clients doivent appartenir au même groupe pour réussir un échange de clés. Si, par exemple, vous avez besoin qu’un client soit sur .Net 6 et un autre sur .Net 4.5.1, vous devez alors utiliser RSA à la place.
Pour mieux comprendre le versionnage de .Net, vous pouvez consulter la ressource suivante.
Framework < .Net 4.7
Ces cibles ne prennent en charge que nistP256 et peuvent utiliser la bibliothèque comme suit.
// Initialize both clients
ECDH test1 = new ECDH();
ECDH test2 = new ECDH();
// Exchange public keys
Byte[] bPublic1 = test1.GetPublicKeyArray();
Byte[] bPublic2 = test2.GetPublicKeyArray();
// Derive
test1.DeriveSharedKey(bPublic2);
test2.DeriveSharedKey(bPublic1);
// Encrypt / Decrypt
Byte[] bEncrypted1 = test1.Encrypt(bTestData);
Byte[] bDecrypted2 = test2.Decrypt(bEncrypted1);
.Net 4.7+ || Standard 2.1 || .Net 6
Ces cibles prennent une courbe comme argument du constructeur.
public enum ECCurveType
{
brainpoolP160r1,
brainpoolP160t1,
brainpoolP192r1,
brainpoolP192t1,
brainpoolP224r1,
brainpoolP224t1,
brainpoolP256r1,
brainpoolP256t1,
brainpoolP320r1,
brainpoolP320t1,
brainpoolP384r1,
brainpoolP384t1,
brainpoolP512r1,
brainpoolP512t1,
nistP256,
nistP384,
nistP521
}
L’utilisation est présentée ci-dessous.
// Initialize both clients
ECDH test1 = new ECDH(ECDH.ECCurveType.nistP521);
ECDH test2 = new ECDH(ECDH.ECCurveType.nistP521);
// Exchange public keys
Byte[] bPublic1 = test1.GetPublicKeyArray();
Byte[] bPublic2 = test2.GetPublicKeyArray();
// Derive
test1.DeriveSharedKey(bPublic2);
test2.DeriveSharedKey(bPublic1);
// Encrypt / Decrypt
Byte[] bEncrypted1 = test1.Encrypt(bTestData);
Byte[] bDecrypted2 = test2.Decrypt(bEncrypted1);
Notez que cette fonctionnalité ne nécessite pas obligatoirement deux clients, car les clés publiques n’ont pas à être échangées pour dériver un secret partagé comme c’est le cas pour ECDH. Bien sûr, comme ci-dessus, vous pouvez envoyer votre clé publique sur le réseau à un autre client qui peut ensuite chiffrer des données que vous seul pouvez déchiffrer.
RSA test = new RSA();
Byte[] bPublicKey = test.GetPublicKeyArray();
Byte[] bEncrypted = test.Encrypt(bPublicKey, bTestData);
Byte[] bDecrypted = test.Decrypt(bEncrypted);
Les données chiffrées et déchiffrées sont limitées à la machine. Les données ne peuvent pas être déchiffrées hors de l’hôte.
// Without entropy
DPAPI test = new DPAPI();
Byte[] bEncrypted = test.EncryptUserDPAPI(bTestData);
Byte[] bDecrypted = test.DecryptUserDPAPI(bEncrypted);