5 votos

Compare cualquier suma de comprobación con la suma de comprobación propuesta por el sitio web

A menudo descargo archivos de la web y muchos sitios web sugieren comparar a propuesta de suma de comprobación con lo que obtengo de mi ordenador (normalmente en Terminal).

Sin embargo, como las sumas de comprobación suelen ser bastante largas 64 caracteres para sha256 o 32 para md5 Por ejemplo, me preguntaba si se podría crear una línea universal de Terminal para utilizar lo que un sitio web podría proponer como suma de comprobación.

He encontrado askUbuntu pregunta que es similar a la mía, sin embargo restringida a md5sum . Lo que me gustaría es un poco lo que sugiere el colaborador pero con cualquier algoritmo de suma de comprobación (por ejemplo, sha1 , sha256 , md5 etc.):

$ echo "checksum_suggested_by_site_to_be_put_here  filetohashA.txt" | md5 -c -

¿Alguna idea?

4voto

user3439894 Puntos 5883

Aquí hay dos enfoques diferentes que se pueden tomar, uno usando Automatizador y AppleScript y el otro utilizando un bash script y Terminal .

Uso de Automator y AppleScript

Lo siguiente ejemplo AppleScript código , utilizado en un Automatizador Servicio 1 , ajustado a Servicio que recibe seleccionado files or folders en Finder con un Ejecutar AppleScript acción permitirá pegar una copia de MD5 , SHA1 , SHA256 o SHA512 valor de la suma de comprobación en un cuadro de diálogo y verificarlo con el archivo en Buscador .

En MacOS High Sierra , he guardado el Automatizador Servicio 1 como Verificar la suma de comprobación pegada . Entonces en Buscador seleccionar una descarga archivo para el que tenía un suma de comprobación copiado en el portapapeles, hice clic con el botón derecho y seleccioné Verificar la suma de comprobación pegada de la Servicios menú contextual. A continuación, pegué en la copia suma de comprobación y presionó el Entre en clave . A continuación, devolvió el mensaje correspondiente.

  • <sup>1 </sup>En <strong>MacOS Mojave </strong>y más tarde, un <strong>Automatizador </strong><em>Servicio </em>se llama <em>Acción rápida </em>. También hay otras diferencias menores de nomenclatura, pero deberían ser más obvias al compararlas con los flujos de trabajo de Automator anteriores a MacOS Mojave.

Ejemplo AppleScript código :

global pastedChecksum
global fileToCaculateChecksum

on run {input}

    set fileToCaculateChecksum to POSIX path of first item of input

    set pastedChecksum to text returned of (display dialog ¬
        "Paste checksum here:" buttons {"Cancel", "Verify Checksum"} default button ¬
        "Verify Checksum" default answer "" with title "Verify Checksum Matches Provided Value")

    set L to (length of pastedChecksum)

    if L = 32 then
        -- Validate MD5 checksum.
        set caculatedChecksum to do shell script "/sbin/md5 -q " & fileToCaculateChecksum's quoted form
        displayValidationMessage(caculatedChecksum)
    else if L = 40 then
        -- Validate SHA1 checksum.
        set caculatedChecksum to do shell script "/usr/bin/shasum " & fileToCaculateChecksum's quoted form & " | /usr/bin/awk '{print $1}'"
        displayValidationMessage(caculatedChecksum)
    else if L = 64 then
        -- Validate SHA256 checksum.
        set caculatedChecksum to do shell script "/usr/bin/shasum -a 256 " & fileToCaculateChecksum's quoted form & " | /usr/bin/awk '{print $1}'"
        displayValidationMessage(caculatedChecksum)
    else if L = 128 then
        -- Validate SHA512 checksum.
        set caculatedChecksum to do shell script "/usr/bin/shasum -a 512 " & fileToCaculateChecksum's quoted form & " | /usr/bin/awk '{print $1}'"
        displayValidationMessage(caculatedChecksum)
    else
        -- Unrecognized checksum.
        display dialog "The length of the pasted checksum was not recognized!" buttons {"OK"} ¬
            default button 1 with title "Unrecognized Checksum" with icon caution
    end if

end run

on displayValidationMessage(caculatedChecksum)
    if pastedChecksum is equal to caculatedChecksum then
        -- Checksum matched.
        display dialog "The checksum for '" & fileToCaculateChecksum & "' matched!" buttons {"OK"} ¬
            default button 1 with title "Valid Checksum"
    else
        -- Checksum did not match.
        display dialog "The checksum for '" & fileToCaculateChecksum & "' did not match!" buttons {"OK"} ¬
            default button 1 with title "Bad Checksum" with icon stop
    end if
end displayValidationMessage
  • Desplácese para ver más <em>código </em>.

Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y no contiene ningún <em>error </em>de la forma más adecuada. Es responsabilidad del usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>.


Uso de bash y Terminal

Si quieres un bash solución para Terminal utilice lo siguiente ejemplo bash código , guardado en un archivo y se hizo ejecutable con chmod .

En Terminal :

touch vpc
open vpc

Copiar y pegar el ejemplo bash código , que se muestra más abajo, en el documento abierto, y luego guárdelo y ciérrelo.

De vuelta en Terminal :

chmod u+x vpc
./vpc

Nota: He utilizado vpc para: [V]erify [P]asted [C]hecksum

También puede colocar el, por ejemplo, vpc ejecutable en un directorio que está dentro de su PATH y poder utilizarlo sin ./ o su nombre de ruta calificado completo .

Ejemplo bash código :

#!/bin/bash

if [[ $# -ne 2 ]]; then
    echo "  Missing argument!"
    echo "  Uasge: vpc pasted_checksum filename"
    echo "  Example: vpc 98d9402a8b446bdd57b4b6729b4d575e /path/to/filename"
    exit 1
fi

l=$(/usr/bin/awk -v var="$1" 'BEGIN {print length(var)}')
[ -f "$2" ] || l=0

case "$l" in
    32 )
                # Validate MD5 checksum.
            c="$(/sbin/md5 -q "$2")"
        ;;
    40 )
                # Validate SHA1 checksum.
            c="$(/usr/bin/shasum "$2" | /usr/bin/awk '{print $1}')"
        ;;
    64 )
                # ValidateSHA256 checksum.
            c="$(/usr/bin/shasum -a 256 "$2" | /usr/bin/awk '{print $1}')"
        ;;
    128 )
                # Validate SHA512checksum.
            c="$(/usr/bin/shasum -a 512 "$2" | /usr/bin/awk '{print $1}')"
        ;;
    0 )
            echo "  Bad Filename!"
            exit 1  
        ;;
    * )
            echo "  Unreconized Checksum!"
            exit 1
        ;;                                      
esac

    # Verify checksum matches provided value, using case insensitive matching.
shopt -s nocasematch
if [[ $1 == "$c" ]]; then
    echo "  The checksum for '""$2""' matched."
else
    echo "  The checksum for '""$2""' did not match!"
fi
shopt -u nocasematch
  • Desplácese para ver más <em>código </em>.

<strong>Nota: </strong>El <em>ejemplo </em><code>bash</code> <em>código </em>contiene algunos <em>tratamiento de errores </em>. Es responsabilidad del usuario añadir cualquier otro <em>tratamiento de errores </em>como sea apropiado, necesario o deseado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X