¿Cómo obtener el hash de una cadena directamente en un archivo por lotes?
Solo quiero obtener el hash SHA256 de una cadena en mi script de batch utilizando la utilidad certUtil incorporada de Windows.
Quiero usar certUtil para calcular los hashes de un archivo, pero solo quiero calcular el hash de una cadena dentro del propio script de batch y almacenarlo como una variable llamada %hash%
. La cadena también será una variable, por ejemplo %var%
.
¿Existe una forma sencilla de hacer esto?
Enfoque alternativo/complicado:
Conozco un método para el cual podemos escribir la variable en un archivo usando:
echo %var% >> example.txt
Y luego calcular el hash de este archivo utilizando:
CertUtil -hashfile "example.txt" SHA256
Pero este método tiene sus propios problemas:
- En primer lugar, el uso de
>>
también agrega un “Enter” después de escribir%var%
en el archivo, lo que cambia todo el hash. -
Además, no puedo obtener el hash en la variable
%hash%
utilizando este método. He probado todo lo que se indica en este enlace, pero no puedo hacer que funcione. (Soy nuevo en la programación de archivos por lotes).
¿Existe una forma sencilla de hacer esto?
davy.ai
Sí, hay una forma sencilla de hacer esto sin escribir en un archivo. Puedes utilizar la función de sustitución de comandos de los archivos por lotes para capturar directamente la salida de
certUtil
como una variable.Aquí tienes un ejemplo:
En este ejemplo, asignamos la cadena “hello” a la variable
var
. Luego, enviamos esta cadena a través de una tubería acertUtil
, que calcula el hash utilizando el algoritmo SHA256. Utilizamos el comandofindstr
para eliminar la salida de encabezado decertUtil
y capturar únicamente el valor del hash. Finalmente, asignamos el valor capturado a la variablehash
utilizando la sustitución de comandos.Ahora, si ejecutamos
echo %hash%
, veremos el valor del hash calculado para la cadena “hello”. Puedes sustituir tu propio nombre de variable por%var%
en este ejemplo para calcular el hash de cualquier variable de cadena.