Ich schreibe einige Daten in eine Datei (eine Zeichenfolge in diesem Fall, aber könnte etwas sein, da ich byte []) verwende, danach lese ich es und das Ergebnis vergleichen. Wenn ich beide byte [] 's vergleiche, sehen sie für mich gleich aus, aber .equals()
gibt false
zurück.String geändert nach dem Schreiben in und Lesen von Datei
finden Sie meinen Code unten:
private void sign(ActionEvent e) throws Exception {
byte[] data = read(file);
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initSign(keyPair.getPrivate());
sig.update(data);
byte[] signatureBytes = sig.sign();
String newFilePath = "output.file";
int signatureLength = signatureBytes.length;
String signString = new BASE64Encoder().encode(signatureBytes);
RandomAccessFile raf = new RandomAccessFile(newFilePath, "rw");
raf.writeInt(signatureLength);
raf.write(signatureBytes);
raf.write(data);
raf.close();
verify(newFilePath, signatureBytes, data);
}
private void verify(String path, byte[] signature, byte[] originalMessage) throws Exception {
File f = new File(path);
RandomAccessFile raf = new RandomAccessFile(f.getPath(), "r");
int sigLength = raf.readInt();
byte[] signatureBytes = new byte[sigLength];
raf.read(signatureBytes);
Long remainingLength = raf.length() - 1 - sigLength;
byte[] message = new byte[remainingLength.intValue()];
raf.read(message);
raf.close();
System.out.println("==== VERIFYING SIGNATURE ====");
String originalString = new BASE64Encoder().encode(signature);
String newString = new BASE64Encoder().encode(signatureBytes);
System.out.println("originalString\n" + originalString);
System.out.println("newString\n" + newString);
System.out.println("Signatures match: " + newString.equals(originalString));
System.out.println("==== VERIFYING MESSAGE ====");
String originalMessageString = new String(originalMessage);
String messageString = new String(message);
System.out.println("originalMessageString = " + originalMessageString);
System.out.println("messageString = " + messageString);
System.out.println("Messages match: " + originalMessageString.equals(messageString));
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initVerify(keyPair.getPublic());
sig.update(message);
System.out.println(sig.verify(signatureBytes)); // false
}
ich folgende Ausgabe: (Die Datei eine txt-Datei ist die Zeichenfolge "Hoi" enthalten)
==== VERIFYING SIGNATURE ====
originalString
DU00HopnNgOnwPL4Y50lwR5CJFVCRqsj3hkdyareMqHPe4RKdCUr2FSNEuh0yq5LyzcP96MNDzNJ
jVTTI8+V3SPMDzQIjw4Ibb+xM3/XZHQi5ej8XfVXao234QytRD5y1bWKxlZEh4BlnzXcqD9tmANB
BOQTG3P15Ea0fFkDYpg=
newString
DU00HopnNgOnwPL4Y50lwR5CJFVCRqsj3hkdyareMqHPe4RKdCUr2FSNEuh0yq5LyzcP96MNDzNJ
jVTTI8+V3SPMDzQIjw4Ibb+xM3/XZHQi5ej8XfVXao234QytRD5y1bWKxlZEh4BlnzXcqD9tmANB
BOQTG3P15Ea0fFkDYpg=
Signatures match: true
==== VERIFYING MESSAGE ====
originalMessageString = Hoi
messageString = Hoi
Messages match: false <------ WTF
false
Jede Hilfe zu der Lösung dieses Problems würde geschätzt werden.
Danke, es scheint, als gäbe es einen Raum, irgendwo war. Ich würde gerne herausfinden, wo es ist. das Vergleichen von 'originalMessage' und' message' mit 'Arrays.equals (originalMessage, message)' gibt false zurück, also schätze ich, dass ich zu viele Bytes lese? –