2008-11-05 4 views
-1

Comment procéder pour effectuer le cryptage AES sur un GUID?Cryptage AES, exemple de code

Sur l'ordinateur des clients, nous allons stocker un GUID et leur clé publique, et nos serveurs internes auront la clé privée et leur guid.

Est-ce toutes les entrées nécessaires pour générer le cryptage AES?

Répondre

8

AES est un algorithme de cryptage symétrique (crypter et décrypter la clé est la même). Si vous parlez de clés publique et privée, vous voulez un asymmetric encryption algorithm tel que RSA.

+0

Il me semble qu'il utilise PKI pour l'interaction client-serveur et doit stocker les clés publiques et privées associées. Bien que n'étant pas exactement la pratique standard dans cette situation, AES est un moyen raisonnable de protéger les clés PKI. –

0

Voici un rapide Crypter/Décrypter des données de chaîne en utilisant AES (Rijndael):

private static readonly byte[] rgbKey = Encoding.UTF8.GetBytes("[email protected]"); // change to your own secure key 

private static readonly byte[] rgbIv = Encoding.UTF8.GetBytes("to$eO_e!maI*o3ut"); // change to your own secure initialization vector 

public static string Encrypt(string originalString) 
{ 
    if (string.IsNullOrEmpty(originalString)) 
    { 
     throw new ArgumentNullException(
      "originalString", 
      "The string which needs to be encrypted can not be null."); 
    } 

    using (var cryptoProvider = new RijndaelManaged()) 
    using (var memoryStream = new MemoryStream()) 
    using (var encryptor = cryptoProvider.CreateEncryptor(rgbKey, rgbIv)) 
    using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) 
    using (var writer = new StreamWriter(cryptoStream)) 
    { 
     writer.Write(originalString); 
     writer.Flush(); 
     cryptoStream.FlushFinalBlock(); 
     writer.Flush(); 
     return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length); 
    } 
} 

public static string Decrypt(string encryptedString) 
{ 
    if (string.IsNullOrEmpty(encryptedString)) 
    { 
     throw new ArgumentNullException(
      "encryptedString", 
      "The string which needs to be decrypted can not be null."); 
    } 

    using (var cryptoProvider = new RijndaelManaged()) 
    using (var memoryStream = new MemoryStream(Convert.FromBase64String(encryptedString))) 
    using (var decryptor = cryptoProvider.CreateDecryptor(rgbKey, rgbIv)) 
    using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) 
    using (var reader = new StreamReader(cryptoStream)) 
    { 
     return reader.ReadToEnd(); 
    } 
} 
+0

Quel est le CipherMode par défaut? –

+0

Cipher-Block Enchaînement. Pour autant que je sache, c'est la valeur par défaut pour tous les descendants de SymmetricAlgorithm. –

1

Vous pouvez chiffrer tout ce qui peut être représenté sous la forme d'un flux d'octets. Le seul ingrédient manquant de la "recette" dans votre question est la clé de chiffrement:

void encrypt(char *plaintext, char *key, char *crypt) 
{ 
    // Encrypt plaintext with the key, returning the result in crypt. 

} 

Notes:

  • utilisant PKI (Les clés publiques/privées), chaque participant conserve généralement son propre privé clé de manière sécurisée et distribue gratuitement sa clé publique . Les messages sont chiffrés à l'aide de la clé publique du destinataire et décryptés par chaque destinataire à l'aide de la clé privée . De la formulation de la question, il n'est pas évident que vous utilisez ce modèle. Jesse fournit un bon exemple à des fins de démonstration. Rappelez-vous que vous faites probablement pas veulent clés coder en dur dans votre application de production ..

+0

D'accord - si votre code ne respecte pas vos limites sécurisées (c'est-à-dire votre serveur géré), vous devriez envisager une solution d'infrastructure à clé publique. Si elle est complètement contenue, stockez vos clés dans une base de données de sorte que si le serveur avec le code est compromis, vous êtes toujours en clair. –

+0

Mais vous ne voulez pas être dans la clarté - c'est pourquoi nous cryptons en premier lieu! :-) –

Questions connexes