Aquí hay tres comandos que puedes usar para cifrar y descifrar datos. Y claro, utilizando los cmdlets de PowerShell ¿no sabes cómo? no te preocupes.

Cifrar datos en la actualidad es muy importante si desea mantener las cosas en secreto sin la amenaza de que otra persona vea cosas tales como contraseñas, información sensible, etc. Entonces podemos cifrar los datos usando los cmdlets disponibles en PowerShell V5.

EsGeeks Modo Fácil

No necesitarás tener conocimiento en PowerShell (PS) para realizar este truco. Te guiaremos paso a paso y si tienes alguna duda nos escribes en los comentarios.

Por cierto, si quieres una guía de inicio en PowerShell, aquí tienes 😉


1. Introducción al Cifrado en PowerShell

Hay tres comandos que componen el conjunto de cmdlets del Sintaxis de Mensajes Criptográficos (Cryptographic Message Syntax – CMS) que puede usar para cifrar y descifrar datos. Estos cmdlets utilizan una criptografía de clave pública: donde hay una clave pública (que se usa para el cifrado) y una clave privada (que se usa para el descifrado). La clave pública, como su nombre lo indica, puede entregarse para permitir que otros cifren los datos, pero la clave privada es algo que desea mantener bajo control. Si alguien en quien no confía obtiene acceso a esta clave privada, puede usarla para descifrar todos sus datos. Si desea más información, puede leer aquí sobre CMS RFC.

Los tres cmdlets que están disponibles para usar son:

  • Protect-CMSMessage: Es lo que usará para cifrar los datos que luego se guardarían en un archivo.
  • UnProtect-CMSMessage: Es lo que se usará para descifrar el documento/archivo.
  • Get-CMSMessage: Permite ver más datos sobre el documento cifrado, como quién puede descifrarlo.

Antes de que podamos comenzar a trabajar con estos cmdlets, debemos compilar un certificado que admita el cifrado que pretendemos. Para esto, crearé un archivo .inf que luego será utilizado en mi solicitud de certificado para generar un certificado de cifrado.

2. Creando un Certificado de Cifrado

Antes que nada deberá tener en cuenta lo siguiente:

  • Todo los comandos se ejecutan en Windows PowerShell, así que primero deberá abrir la consola.


  • Es importante la ubicación donde trabaja, por ejemplo, para el caso de los certificados; al ejecutar los comandos sólo funcionará si está en la misma ruta que el archivo.
Archivos para Cifrar Datos con los cmdlets

Archivos para Cifrar Datos con los cmdlets

A continuación, copie y pegue el siguiente texto y guárdelo como DocumentEncryption.inf:

Cambie la sección Subject

Tenga en cuenta la línea Subject ya que es aquí donde reemplazará mi información por la suya. Esto es importante al cifrar sus datos, de modo que el cmdlet sepa qué certificado usar.
[Version]
Signature = "$Windows NT$"
[Strings]
szOID\_ENHANCED\_KEY\_USAGE = "2.5.29.37"
szOID\_DOCUMENT\_ENCRYPTION = "1.3.6.1.4.1.311.80.1"
[NewRequest]
Subject = "[email protected]"
MachineKeySet = false
KeyLength = 2048
KeySpec = AT_KEYEXCHANGE
HashAlgorithm = Sha1
Exportable = true
RequestType = Cert
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE |  CERT_DATA_ENCIPHERMENT_KEY_USAGE"
ValidityPeriod = "Years"
ValidityPeriodUnits = "1000"
[Extensions]
%szOID\_ENHANCED\_KEY\_USAGE% = "{text}%szOID\_DOCUMENT\_ENCRYPTION%"

Creamos el certificado de cifrado:

certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer
CertReq Certificado creado e instalado

CertReq: Certificado creado e instalado

Verifiquemos que el certificado esté cargado en el almacén de certificados de mi usuario:

Get-ChildItem -Path Cert:\CurrentUser\My -DocumentEncryptionCert
Verificar certificado de Cifrado

Verificar certificado de Cifrado

3. Cifrado de Datos con los cmdlets de PowerShell

Ahora que tenemos un certificado de cifrado creado y cargado en nuestro almacén de certificados, podemos comenzar a cifrar los datos y luego intentar descifrarlos.

$Text = '¡Esta es una información que debemos cifrar para que nadie más pueda leerla!'

El anterior comando lo guardaremos en un archivo TXT, así:

Protect-CmsMessage -To '[email protected]'  -Content $Text  -OutFile MiTextoCifrado.txt

Tenga en cuenta los siguiente parámetros:

  • -To: es donde especificaré la línea exacta del Subject que expliqué al crear el archivo de solicitud para el certificado de cifrado.
  • -Content: es la información real que se cifrará, mientras que -OutFile especifica la ubicación del archivo del texto cifrado.

Puede abrir el documento con doble clic si gusta, pero es mejor ver el documento usando Get-Content, que no nos mostrará nada útil más que los datos encriptados.

Get-Content .\MiTextoCifrado.txt
Mi Texto Cifrado en PowerShell

Mi Texto Cifrado en PowerShell

No es exactamente algo útil para una persona que no tiene la clave privada, leer los datos. Podemos utilizar el cmdlet Get-CMSMessage para obtener más información sobre este documento cifrado:

Get-CmsMessage -Path .\MiTextoCifrado.txt
Información con Get-CmsMessage

Información con Get-CmsMessage

En la anterior imagen podemos ver información como los destinatarios y los datos cifrados (aún encriptados).


Finalmente, usando la clave privada podemos elegir la salida de Get-CMSMessage y Unprotect-CMSMessag para descifrar el mensaje.

Get-CmsMessage -Path .\MiTextoCifrado.txt |
 Unprotect-CmsMessage -To '[email protected]'
Descifrar datos con Unprotect-CmsMessage

Descifrar datos con Unprotect-CmsMessage

4. Conclusión

Como puede ver, pude descifrar el mensaje usando la clave privada y ver los datos dentro de él. Esto proporciona una excelente manera de mantener sus datos privados cifrados, ¡pero asegúrese de proteger la clave privada a toda costa! Si eso se pone en peligro, cualquiera que tenga acceso a la clave privada ahora tiene acceso a sus datos encriptados.

¡Hasta pronto, y si te ha gustado comparte el artículo 😉 !

¡Mantente actualizado!

Suscríbete a nuestro boletín semanal...

Suscríbete a nuestro boletín electrónico para recibir artículos útiles y ofertas especiales. No te perderás absolutamente de nada!

Enviaremos solamente boletines al email y no compartiremos su email.