Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

157
Vistas
Almacene una clave AES conocida con CngKey por nombre para su uso posterior

Quiero almacenar una clave AES conocida (recuperada sin conexión) ingresándola en la aplicación una vez, guardándola en Cng para almacenarla y luego hacer referencia a ella solo por su nombre en el uso posterior.

Quiero guardar la clave en el proveedor de almacenamiento de claves para que mi aplicación no la cargue en la memoria.

Puedo crear (generar) una clave AES (que puedo recuperar y crear una instancia de AesCng ) como esta:

 CngProvider keyStorageProvider = CngProvider.MicrosoftSoftwareKeyStorageProvider; CngKeyCreationParameters keyCreationParameters = new CngKeyCreationParameters() { ExportPolicy = CngExportPolicies.AllowPlaintextExport, KeyCreationOptions = CngKeyCreationOptions.OverwriteExistingKey }; var name = "mykey"; var algo = new CngAlgorithm("AES"); var created = CngKey.Create(algo, name, keyCreationParameters);

Pero, ¿cómo puedo agregar mi clave simétrica AES ya conocida y simplemente hacer referencia a ella por nombre la próxima vez que ejecute mi aplicación para ejecutar el cifrado/descifrado usando Cng?

El uso CngKey.Import no me permite especificar un nombre y creo que probé todas las sobrecargas, pero todas producen algún tipo de error.

ACTUALIZAR:

Este es un ejemplo de trabajo completo al crear una clave.

 // Calling code byte[] key = //<from external input>; byte[] data = new byte[] { 0xA, 0xB, 0xC, 0xD }; crypto.StoreKey("appkey", key); var encryptedData = crypto.EncryptWithStoredKey("appkey", data); // Implementation public void StoreKey(string name, byte[] key) { CngKeyCreationParameters keyCreationParameters = new CngKeyCreationParameters() { KeyCreationOptions = CngKeyCreationOptions.OverwriteExistingKey }; var algo = new CngAlgorithm("AES"); // Question: How can I import the byte[] key with name "appkey" instead of generating a new key here? CngKey.Create(algo, name, keyCreationParameters); } public byte[] EncryptWithStoredKey(string name, byte[] data) { using (var cng = new AesCng(name)) using (var encryptor = cng.CreateEncryptor()) using (var memoryStream = new MemoryStream()) { using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) { cryptoStream.Write(data, 0, data.Length); cryptoStream.FlushFinalBlock(); return memoryStream.ToArray(); } } }
over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda