Welche Java Version soll ich verwenden?
Jacksum 3 und neuer benötigt mind. Java 11 oder neuer. Ich empfehle die
LTS Releases, weil diese stabil sind.
/opt/java/jre/64/latest
Anschliessend starten Sie update-alternatives. Siehe auch https://help.ubuntu.com/community/Java
$ sudo update-alternatives --install "/usr/bin/java" "java"
"/opt/java/jre/64/latest/bin/java" 1
$ sudo update-alternatives --config javaJa, eine vom Jacksum-Projekt initiierte graphische Oberfläche heißt HashGarten. Sie wird zusätzlich zum Kommandozeileninterface installiert von den Installern, die die Integration in Dateibrowser übernehmen.
Was kann das CLI was das GUI nicht kann?
Nur das CLI und das API bieten den kompletten Funktionsumfang an. Jacksum's primäre Benutzerschnittstelle ist die Kommandozeile. Sie unterstützt die Kompatibilität mit anderen populären auf der Kommandozeile basierten Programmen unter Unix und GNU/Linux. Jacksum wird stets das Kommandozeileninterface unterstützen, da es den Einsatz des Programms mit Cronjobs und Pipes ermöglicht und seine Möglichkeiten in Kombination mit anderen nützlichen kommandozeilenbasierten Tools wie grep, sort, unique, zip, tar usw. voll ausspielen kann und eine direkte Integration in Dateibrowser ebenfalls ermöglicht.
Wird eine API unterstützt?
Jacksum unterstützt auch ein öffentliches API. Es kann von anderen Projekten und graphischen Benutzeroberflächen benutzt werden.Was bedeuten die Werte in der Ausgabe von Jacksum?
z. B.
599770357 23560 irgendein.txt
Die erste Zahl (bzw. Zeichenkette) gibt den (kodierten) Hash-Wert der verwendeten Hash-Funktion an. Der angegebene Hash-Wert hängt tatsächlich ab vom verwendeten Algorithmus (-a) und vom der gewählten Kodierung des Hash-Wertes (-E, -x, bzw. -X). Die zweite Zahl gibt i. d. R. die Größe der Datei in Bytes an. Einige Ausnahmen wie bsd sum und UNIX system V sum geben die Größe der Datei in Blöcken an. Die Größe entfällt gänzlich bei den kryptografischen Hash-Algorithmen (z. B. SHA3). Die dritte Spalte (zweite Spalte bei den kryptografischen Hash-Algorithmen) gibt den Dateinamen mit oder ohne Angabe des Pfades an. Der Dateiname entfällt, wenn die Standardeingabe gewählt wurde.
Seit Jacksum 1.3.0 gibt es die Möglichkeit, Zeitstempel von Dateien mit auszugeben. In diesem Fall erscheint eine zusätzliche Spalte in jeder Zeile (vor dem Dateinamen). Die Bedeutung des Zeitstempels ist abhängig vom Format, das mit der Option -t gesetzt wird.
599770357 23560 20031027140042 irgendein.txtWarum gibt es alternative Implementierungen für die Algorithmen ?
Sind CRCs heute nicht überflüssig?
Wie wird ein CRC berechnet?
Viele Leute haben mich diese Frage bereits gestellt. Es gibt ein paar gute Webseiten, die genau erklären wie CRC berechnet wird. Besuchen Sie http://surf.to/anarchriz oder ftp://ftp.rocksoft.com/papers/crc_v3.txt. Sie können auch einen Blick auf den Sourcecode von Jacksum werfen.
crc:16,1021,FFFF,false,false,0
Die Notation "crc:width,poly,init,refIn,refOut,xorOut" wird seit Jacksum 1.7.0 verwendet, um einen CRC Algorithmus entprechend dem "Rocksoft(TM) Model CRC Algorithm" zu definieren. Verwendet man die Nachricht "123456789", liefert der CRC Algorithmus mit den obigen Parametern den Wert 0x29B1:
jacksum -q txt:123456789 -X -a crc:16,1021,FFFF,false,false,0
29B1
Andere Quellen behaupten jedoch, daß der entsprechend des CCITT Standards (siehe oben), einer Nachricht vor der Berechnung zuerst 16 Null-Bits vorgeschaltet werden müssten. Diese Interpretation des Standards kann wie folgt ausgedrückt werden:
crc:16,1021,1D0F,false,false,0
Beachten Sie, daß in diesem Fall nur der Initialwert unterschiedlich ist, da eine 16 Null-Bit Nachricht durch einen CRC mit dem Initialwert 0xFFFF berechnet, die Prüfsumme 0x1D0F zurückliefert, die wiederum dem Initialwert für die alternative Interpretation des Algorithmus entspricht.
Verwendet man die Nachricht "123456789" , liefert der CRC Algorithmus mit den obigen Parametern den Wert 0xE5CC:
jacksum -q txt:123456789 -X -a crc:16,1021,1D0F,false,false,0
E5CC
Welche Algorithmen werden von Jacksum nicht unterstützt?
Es gibt einige Algorithmen, die Jacksum (noch) nicht unterstützt. Dazu
gehören AICH, Cellhash, BTIH, BTRH, Boognish, EDON-R (hat es nicht in die
zweite Runde beim NIST-Wettbewerb geschafft), FEAL (patentiert), FFT-hash,
Snefru (broken), DSS1, MAA (Message Authenticator Algorithm, broken),
Maelstrom-0, Maelstrom-1, Maelstrom, N-Hash (patentiert und unsicher),
PMD-N, PMD-V, PMD-128, PMD-160, PMD-192, PMD-224, PMD-256 (koreanische
Standards, keine komplette englische Dokumentation vorhanden), VEST-4,
VEST-8, VEST-16, VEST-32 (Patent schwebend), und die VMS/VAX checksum
(sehr wenig Information verfügbar). Wenn Sie Sourcecode zu diesen
Algorithmen (vorzugsweise in Java oder Python) besitzen und mir senden,
werde ich auch diese in Jacksum aufnehmen. Beachten Sie, daß die meisten
dieser Algorithmen schon etwas älter und nicht wirklich kryptographisch
stark sind, für die meisten von ihnen sind bereits Kollisionen bekannt
worden (bzw. lassen sich zu leicht berechnen), jedoch sind die Algorithmen
auf meiner Wunschliste für Lehrzwecke und der Vollständigkeit halber.
Mein Freund hat einen PC von dem ich denke, dass er gehackt wurde, aber ich habe keine andere Maschine, um diese miteinander zu vergleichen ...
Die Prüfsummen der gängigsten UNIX/Linux-Derivate fanden Sich bis
Dezember 2006 hier: http://www.knowngoods.org
Für Solaris gab es den Service von Sun auf
http://sunsolve.sun.com/pub-cgi/fileFingerprints.pl bis im Jahr 2010
Oracle Sun Microsystems übernommen hatte.
Für Windows habe ich damals wie heute keinen äquivalenten Service
gefunden.
Wie kann ich Verzeichnisse synchronisieren?
Mit Hilfe von Jacksum kann eine unidirektionale Synchronisation durchgeführt werden, d. h. Jacksum kann Veränderungen auf einem Rechner erkennen und diese Veränderungen rückgängig machen, bzw. diese Veränderungen auf andere Rechner anwenden. Diese Synchronisation klappt sogar, wenn keine Verbindung zwischen den beiden Rechnern besteht. Gehen wir davon aus, Sie haben einen fehlerfreien und einen fehlerhaften Computer.
Beispiel für Windows:
1. Wechseln Sie in das fehlerfreie Verzeichnis auf Ihrem fehlerfreien
Computer und führen Sie folgende Kommandos aus:
cd good
jacksum -a sha256 -o c:\temp\hashes.sha256 .
2. Die Datei check.jacksum repräsentiert eine Momentaufnahme aller
Dateien des fehlerfreien Computers im fehlerfreien Verzeichnis.
Transferieren Sie die Datei hashes.sha256
anschliessend zum fehlerhaften Computer.
3. Wechseln Sie in das fehlerhafte Verzeichnis auf dem fehlerhaften
Computer und führen Sie folgende Kommandos aus:
cd bad
jacksum -a sha256 -c c:\temp\hashes.sha256 --list-filter bad
--list > c:\temp\files.list
4. Die Datei files.list enthält nun eine Liste von veränderten
und gelöschten Dateien.
Transferieren Sie die Datei files.list nun
zum fehlerfreien Computer.
5. Wechseln Sie in das fehlerfreie Verzeichnis auf Ihrem fehlerfreien
Computer und führen Sie folgende Kommandos aus:
cd good
type files.list | zip -@ patch.zip
Für den Fall, daß Sie .tar.bz2 anstelle von zip
bevorzugen:
cd good
tar cfv patch.tar -I files.list
bzip2 -9 patch.tar
6. Die Datei patch.zip bzw. patch.bz2 enthält nun alle Dateien des
fehlerfreien Computers, die auf dem fehlerhaften Computer modifiziert oder
gelöscht wurden. Transferieren Sie die Datei patch.zip bzw.
patch.bz2 zum fehlerhaften Computer und extrahieren Sie die im zip bzw.
bz2 enthaltenen Dateien ins fehlerhafte Verzeichnis. Die Dateien aus dem
zip/bz2 überschreiben die Dateien des fehlerhaften Verzeichnisses und aus
dem fehlerhaften Computer wurde ein fehlerfreier Computer.
Wie erstelle ich einen Patch mit Jacksum?
Als Entwickler könnten Sie Ihren Kunden einen Patch für Ihre Version zur Verfügung zu stellen. Jacksum kann Ihnen hier behilflich sein.
Beispiel für Unix:
1. Wechseln Sie in das Verzeichnis der neuen Version und führen Sie
folgende Kommandos aus:
cd ~/newversion
jacksum -a sha256 . > /tmp/hashes.sha256
2. Wechseln Sie in das Verzeichnis der alten Version und führen Sie
folgende Kommandos aus:
cd ~/oldversion
jacksum -a sha256 -c /tmp/hashes.sha256 --list-filter bad
--list > /tmp/files.list
3. Wechseln Sie erneut in das Verzeichnis der neuen Version und packen
Sie die neuen und überarbeiteten Dateien in die Datei patch.zip
cd ~/newversion
tar cfv patch.tar -T /tmp/files.list (GNU/Linux,
Mac
OS X, PC-BSD)
tar cfv patch.tar -I /tmp/files.list (PC-BSD,
Solaris)
bzip2 -9 patch.tar
Für den Fall, daß Sie .zip anstelle von .tar.bz2 den
Vorzug geben:
cd ~/newversion
cat /tmp/files.list | zip -@ patch.zip (GNU/Linux, Mac OS
X, Solaris)
Vielen Dank an Girish Narang, mit dem ich eine "Patch-Erstell-Lösung" mit
Hilfe von Ant entwickelt habe. Laden Sie das Ant
script und das zugehörige property
file herunter, um Patches mit Jacksum und Ant zu erzeugen.
Ist es möglich, zwei Verzeichnisse zu überprüfen?
Ja, bitte verwenden Sie die Option -c, um Dateien gegen eine gegebene Liste zu überprüfen. Sie werden dann genau wissen, welche Dateien identisch sind, welche modifiziert, gelöscht oder hinzugefügt wurden.
Ich erhalte den Fehler "java.io.IOException: Datenfehler (CRC-Prüfung)". Was bedeutet das?
Das ist ein Fehler, den das deutsche Windows (NT basierend) meldet und er bedeutet, daß Windows nicht mehr in der Lage ist, von Ihrem CD-ROM oder DVD-Laufwerk eine Datei zu lesen. Sie sollten Ihre Dateien auf einen neuen Datenträger sichern, um weitere Datenverluste zu vermeiden.Unter Linux heißt der Fehler entsprechend "java.io.IOException: Input/output error" (Beispiel Red Hat).
[Windows] Beim Versuch mit einem normalen Benutzer auf jacksum-sendto.bat (aus der Jacksum Windows Explorer Integration) zuzugreifen, erhalte ich die Fehlermeldung "Auf das angegebene Gerät, bzw. den Pfad oder die Datei kann nicht zugegriffen werden. Sie verfügen eventuell nicht über ausreichendeBerechtigungen, um auf das Element zugreifen zu können."
Das kann unter NTFS formatierten Systempartitionen passieren. Die Fehlermeldung sagt, daß der Benutzer nicht die nötigen Rechte besitzt, die Batch-Datei auszuführen. Als Administrator des Systems können Sie aber jacksum-sendto.bat die nötigen Lese- und Ausführungsrechte für normale Benutzer geben. Das geht i. d. R. am einfachsten, wenn man als Administrator die jacksum-sendto.bat Datei kopiert, die originale Datei löscht und die Kopie von jacksum-sendto.bat wieder nach jacksum-sendto.bat umbenennt. Falls das nicht klappt, müssen Sie als Administrator das NTFS-Rechtemanagement von Windows bemühen.
[GNU/Linux, Unix] Ich erhalte bash: !": event not found
jacksum -a crc32 -q "txt:Hello World!" gibt mir:
bash: !": event not found
Dies ist ein Problem der Bash shell. Das Ausrufezeichen ! in der Bash hat eine spezielle Bedeutung (die auch geändert werden kann), es symbolisiert den "history expansion character". Die Störung ist auch mit echo reproduzierbar.
$ echo "!"
bash: !: event not found
$ echo "\!"
\!
$ echo \!
!
Die korrekte Verwendung ist daher
jacksum -a crc32 -q "txt:Hello World"\!
472456355 12
jedoch ist diese Syntax nicht sehr komfortabel. Zum Glück können einfache Hochkomma verwendet werden, um das Problem elegant zu lösen::
$ echo '!'
!
jacksum -a crc32 -q 'txt:Hello World!'
472456355 12
Siehe auch die Manpage der Bash "Enclosing characters in single quotes
preserves the literal value of each character whithin the quotes".
Achtung: folgende Abschnitte sind nur für Jacksum 1.x und nicht für Jacksum 3.x
Gibt es Codebeispiele wie man Jacksum in einem anderen Projekt verwenden kann?
Ja, einer der grundlegenden Codeschnipsel ist hier:
| import java.io.*; import java.security.*; import jonelo.jacksum.*; import jonelo.jacksum.algorithm.*; // ... AbstractChecksum checksum = null; // updates the checksum
with the content of a file |
Die update-Methoden können verwendet werden, um das Checksum-Objekt mit
bytes oder bytearrays zu aktualisieren:
| // reset the object for reuse (any formatting rules remain) checksum.reset(); // update the checksum with a single byte checksum.update(abyte); // update the checksum with a bytearray checksum.update(bytearray); // update the checksum with the first 10 bytes in the bytearray checksum.update(bytearray, 0, 10); System.out.println(checksum); |
Um zu erfahren, welche Algorithmen unterstützt werden, verwenden Sie das
folgende Snippet. Wenn Sie JSE 5.0 oder neuer verwendet, können Sie
Generics einsetzten, um Castings zu vermeiden.
| Map map = JacksumAPI.getAvailableAlgorithms(); Iterator iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry)iterator.next(); String description =
(String)entry.getValue(); AbstractChecksum
checksum =
JacksumAPI.getChecksumInstance((String)entry.getKey()); |
Um das Ausgabeformat zu bestimmen, können Methoden auf dem checksum
Objekt angewendet werden:
| // checksum is printed in hex form (see also option -x) // example: 7d93370d5ef94450151826ca20c6e512 checksum.setEncoding(HEX); // checksum is printed in
uppercase hex form (see also option -X) // checksum is printed in
uppercase hex and grouped form (see also options -g, -G)
// checksum is printed in
Base 64 form (see also option -E) // checksum is printed in
BubbleBabble form (see also option -E) |
Das Ausgabeformat einer kompletten Zeile kann z. B. mit der format
Methode beeinflußt werden:
| // print the checksum, the default output format depends on the algorithm System.out.println(checksum); // print the checksum,
the default output format depends on the algorithm
// print the checksum
value only (see also option -F) // print the checksum
value with a customized format (see also option -F)
|
Obiges Beispiele sollen lediglich als kleine Hilfe dienen, die ersten Hürden zu nehmen. Für detaillierte Informationen über alle Möglichkeiten mit Jacksum, schauen Sie bitte in den Open Source Code oder erzeugen Sie sich javadoc.
Was ist für die nächsten Versionen geplant?
Ich habe immer noch eine Menge an Ideen für Jacksum und einige gute Verbesserungsvorschläge von anderen Leuten rund um den Globus für das Jacksum Projekt. Keine dieser Ideen wird vergessen werden, aber es dauert seine Zeit, sie zu implementieren, zu testen, zu optimieren und sie zu dokumentieren. Siehe dazu bitte auch https://github.com/jonelo/jacksum/issues
Warum heisst Jacksum "Jacksum" ?
Jacksum ist ein Kunstwort aus JAva und ChecKSUM,
weil Jacksum vollständig in der Programmiersprache Java geschrieben ist.
Damit ist Jacksum plattformübergreifend verfügbar und läuft quasi auf
jeder Plattform, die eine kompatible Java Laufzeitumgebung bereitstellt,
einschliesslich Microsoft Windows, GNU/Linux, macOS und anderen
Unix-Derivaten (z. B. BSD) ohne Neukompilierung auf der jeweiligen
Plattform. Außerdem klingt "Jacksum" im Englischen wie "checksum".
Was ist HashGarten?
HashGarten ist der Name einer Software (ein Unterprojekt von Jacksum), die den Zugriff mit einer grafischen Benutzeroberfläche auf Jacksum-Funktionen herstellt.
Welche Lizenz verwendet Jacksum?
Die GPL stellt sicher, daß das Programm auch frei bleibt und gewisse Freiheiten garantiert werden. Die GPL besagt, daß wenn Sie eine eigene Erweiterung bzw. Änderung gemacht haben, und diese veröffentlichen, diese ebenfalls unter die GPL stellen müssen. So ist sichergestellt, dass der Nährboden des Wissens stets fruchtbar, d. h. quelloffen bleibt und auf ihm neue Früchte gedeihen können.
Kann ich Jacksum in meinem Projekt verwenden?
Ja, vorausgesetzt Sie respektieren die Freiheit von Feier Open Source und akzeptieren die Bedingungen der GNU GPL. Es ist untersagt, Jacksum in properitärer Software zu verwenden ("kommerziell" und "proprietär" ist nicht das selbe!), die Arbeit als die Ihre auszugeben ist ebenfalls untersagt. Machen Sie doch selbst mit bei Freier Open Source, dann sind sich auch herzlich eingeladen, am Erfolg von Open Source Software teilzunehmen.
Darf ich den Namen Jacksum für mein eigenes Projekt verwenden?
Der Name Jacksum ist meine persönliche Wortneuschöpfung und er existiert öffentlich seit Juli 2002. Der Name Jacksum ist urheberrechtlich geschützt und ich bitte das zu respektieren. Jacksum's source code steht hingegen unter den Bedingungen der freien Open Source Lizenz GPL jedermann zur Verfügung.