2009-07-17 21 views
1

Derzeit, wenn ich eine Signatur mit java.security.signature, gibt es eine Zeichenfolge zurück. Ich kann nicht scheinen, diese Zeichenkette zu benutzen, da es spezielle Zeichen gibt, die nur gesehen werden können, wenn ich die Zeichenkette in notepad ++ kopiere, von dort, wenn ich diese Sonderzeichen entferne, kann ich die Reste der Zeichenkette in meinem Programm benutzen.Benötigen Sie Hilfe beim Entfernen seltsamer Zeichen aus der Zeichenfolge

In Notizblock sie sehen aus wie schwarze Kästchen mit den Worten ACK GS STX SI SUB ETB BS VT

Ich verstehe nicht wirklich, was sie sind, so ist es schwer zu sagen, wie Fahrt von ihnen zu bekommen.

Gibt es eine Funktion, die ich ausführen kann, um diese und möglicherweise ähnliche Zeichen zu entfernen?

wenn ich die base64-Klasse in dem Pfosten geliefert wird, kann ich nicht mit einer Signatur zurück

System.out.println(signature); 
String base64 = Base64.encodeBytes(sig); 
System.out.println(base64); 
String sig2 = new String (Base64.decode(base64)); 
System.out.println(sig2); 

gibt den Ausgang

”zÌý¥y]žd”xKmËY³ÕN´Ìå}ÏBÊNÈ›`Αrp~jÖüñ0…Rõ…•éh?ÞÀ_û_¥ÂçªsÂk{6H7œÉ/”âtTK±Ï…Ã/Ùê² 
lHrM/aV5XZ5klHhLbctZs9VOtMzlfc9Cyk7Im2DOkXJwfmoG1vzxMIVS9YWV6Wg/HQLewF/7X6XC56pzwmt7DzZIN5zJL5TidFRLsc+Fwy/Z6rIaNA2uVlCh3XYkWcu882tKt2RySSkn1heWhG0IeNNfopAvbmHDlgszaWaXYzY= 
[[email protected] 
+0

Und das Problem ist? – akarnokd

Antwort

5

Die ungeraden Zeichen sind da, da kryptografische Signaturen Bytes statt Strings erzeugen. Wenn Sie also eine druckbare Darstellung wünschen, sollten Sie Base64 encode it (here's a public domain implementation for Java).

Das Entfernen der nicht druckbaren Zeichen aus einer kryptografischen Signatur macht es unbrauchbar, da Sie es nicht zur Überprüfung verwenden können.

Update:

[B @ 15356d5

Dies ist das Ergebnis von toString auf einem Byte-Array bezeichnet. "[" bedeutet Array, "B" bedeutet Byte und "15356d5" ist die Adresse des Arrays. Sie sollten das Array werden geben Sie aus dekodieren bekommen [Signature.verify] (http://java.sun.com/j2se/1.4.2/docs/api/java/security/Signature.html#verify(byte[]))

Etwas wie:.

Signature sig = new Signature("dsa"); 
sig.initVerify(key); 
sig.verify(Base64.decode(base64)); // <-- bytes go here 
+0

hält die base64-Konvertierung einer Signatur vom technischen Standpunkt aus noch als gültige Signatur? – ChronoXIII

+0

Es enthält alle Daten, darauf kommt es an. Die base64-Codierung muss umgekehrt werden, bevor sie verwendet wird, um die Gültigkeit der Signatur zu überprüfen. –

+0

Ich habe Probleme, die base64-Konvertierung in eine Signatur zu ändern, ich habe den ersten Eintrag aktualisiert – ChronoXIII

5

Wie werden Sie die Signatur „machen“? Wenn Sie die Methode sign verwenden, erhalten Sie ein Bytearray und keine Zeichenfolge zurück. Das ist keine binäre Darstellung eines Textes, es sind nur willkürliche Binärdaten. Das sollten Sie verwenden, und wenn Sie es in eine Zeichenfolge konvertieren müssen, sollten Sie eine base64-Konvertierung verwenden, um Datenbeschädigung zu vermeiden.

+0

Konvertiere ich das Byte-Array der Signaturen? – ChronoXIII

0

Wenn ich Ihr Problem richtig zu verstehen, müssen Sie mit dem Code von Zeichen loswerden unter 32, außer vielleicht char 9 (tab), char 10 (neue Zeile) und char 13 (return)

Bearbeiten: Ich stimme mit den anderen als Handhabung einer Krypto-Ausgabe wie dies ist nicht das, was Sie normalerweise wollen

+5

"Daten loszuwerden" in einer kryptografischen Signatur ist selten eine gute Idee ...Ich vermute stark, dass es ein grundsätzlicheres Problem ist. –

+0

Ich habe mich auch gefragt. – akarnokd

+0

Was meinen Sie mit dem Code unter 32 – ChronoXIII

Verwandte Themen