Comment utiliser le cryptage Rijndael avec un .Net de la classe de Base de la bibliothèque? (Ne pas .Net Framework)
Comment nous utilisons le cryptage Rijndael dans un .Net de la classe de Base de la bibliothèque? (Pas un .Net Framework Bibliothèque de Classe) Nous avons besoin de créer un partagées .Net de bibliothèque de Base pour une utilisation dans de multiples projets, de la mise en œuvre de Chiffrer et de Déchiffrer les méthodes qui utilisent le même cryptage Rijndael à travers les projets.
Nous sommes actuellement en utilisant:
- VS Enterprise 2015
- c#
- .Net De La Classe De Base De La Bibliothèque
- .NETStandard, Version=v1.6 référence
Il apparaît que la mise en œuvre de Rijndael et AES est absent de la .Net de Base version 1.0...il semble être la seule à inclure les classes de base. Comment pouvons-nous obtenir une .Net, Base de la mise en œuvre de Rijndael de chiffrement AES ou ajouté comme une référence à un nouveau .Net de Base projet de Bibliothèque de classes?
Ici est le cryptage de la méthode qui fonctionne .Net Framework 4.5.2:
public static string Encrypt(string valueToEncrypt, string symmetricKey, string initializationVector)
{
string returnValue = valueToEncrypt;
var aes = new System.Security.Cryptography.RijndaelManaged();
try
{
aes.Key = ASCIIEncoding.ASCII.GetBytes(symmetricKey);
aes.IV = ASCIIEncoding.ASCII.GetBytes(initializationVector);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.ISO10126;
var desEncrypter = aes.CreateEncryptor();
var buffer = ASCIIEncoding.ASCII.GetBytes(valueToEncrypt);
returnValue = Convert.ToBase64String(desEncrypter.TransformFinalBlock(buffer, 0, buffer.Length));
}
catch (Exception)
{
returnValue = string.Empty;
}
return returnValue;
}
Semble comme il est sur la feuille de route pour la version 1.1: github.com/dotnet/corefx/issues/9984
Corriger Nate, le principal problème semble être que la Rijndael mise en œuvre est absent de la Cryptographie de référence dans la version actuelle d' .Net de Base...juste de la classe de Base abstraite implémentations.
1. ISO10126 a été retirée, PKCS#7 est probablement un meilleur choix et semble en fait pour répondre à la ISO10126 spec. 2. Il est préférable d'utiliser un hasard iv d'autre messages identiques ont la même chiffré octets. Généralement le iv est créé à partir d'un CPRNG et ajouté aux données chiffrées pour une utilisation lors du déchiffrement. 3. À l'aide d'une chaîne que le chiffrement n'est pas particulièrement sécurisé et peut causer de la longueur de la clé de questions. Il est préférable d'utiliser une fonction de dérivation de clé comme PBKFD1. Il y a aussi l'espoir aveugle le mot de passe sera ACIII et pas un autre codage comme l'unicode.
OriginalL'auteur Ensunder | 2016-07-12
Vous devez vous connecter pour publier un commentaire.
La différence (dans l' .NET) entre Rijndael et AES est que Rijndael permet la taille de bloc du changement, mais le SVE n'est pas. Depuis RijndaelManaged de la taille de bloc par défaut est le même que l'AES la taille des blocs de 128 bits /16 bits) que vous êtes, en fait, à l'aide de l'algorithme AES.
Au lieu de l'instanciation de la mise en œuvre type de nom, il suffit d'utiliser l'usine (
Aes.Create()
). Qui fonctionne dans les deux .NET de Base et .NET Framework.D'autres choses à mentionner:
using
déclaration.desEncryptor
) sont IDisposable, vous devez les utiliser dans unusing
déclaration.aes.GenerateIV()
si vous utilisez le même objet pour plusieurs opérations) et de le présenter avec le texte chiffré. Afin de chiffrer prend une clé et le texte clair et produit un texte chiffré et IV. Décrypter prend (clé, IV, texte chiffré) et produit en clair.Étendre le tableau à être alignés (ajout d'un autre bloc si elle ne l'est déjà) et de le remplir par en.wikipedia.org/wiki/Padding_(cryptographie)#ISO_10126. Si vous utilisez des cours d'eau, vous pouvez le vider d'un tableau ou d'en faire un personnalisé ICryptoTramsform à envelopper l'actuel et de l'appliquer/enlever le rembourrage en TransformFinalBlock. (La transformation personnalisée serait également travailler pour direct octets, bien sûr).
Lors de l'utilisation de la BFC avec NoPadding. CreateEncryptor créé à partir d'Aes ne peut pas a InputBlockSize == 1. RijndaelManaged n'ont pas ce problème.
OriginalL'auteur bartonjs
Si vous voulez juste pour crypter/décrypter des choses, éviter l'utilisation de Rijndael directement asp.net core a quelques beaucoup plus agréable des emballages qui sont beaucoup plus faciles à utiliser et plus susceptibles d'être correctement sécurisé par défaut. Il est connu comme DataProtection.
Voir le la protection des données docs pour plus d'informations
OriginalL'auteur alastairtree