Ich habe zwei Zeichenfolgen
%Vor% Die Strings sind in hexadezimaler Darstellung. Ich möchte sie XORIEREN. XORing normalerweise Zeichen für Zeichen gibt das richtige Ergebnis für andere außer F XOR 6
. (Es gibt 112, sollte die Antwort 9 sein)
Bitte sagen Sie mir den richtigen Weg, um es in JAVA zu implementieren
EDIT: Umwandlung in int und xoring funktioniert. Aber wie xor wenn zwei Saiten unterschiedlich lang sind.
Anstatt die Unicode -Darstellungen zu XORIEREN, wandle einfach jedes Zeichen in die Zahl um, die es in Hexadezimalzahlen darstellt, XOR diese, und wandle es dann in Hex zurück. Du kannst immer noch das eine Zeichen gleichzeitig machen:
%Vor%Beachten Sie, dass dies so lange funktionieren sollte, wie die Strings sind (solange sie dieselbe Länge haben) und Sie sich nie um negative Werte kümmern müssen - Sie erhalten immer nur das Ergebnis der XOR-Verknüpfung jedes Zeichenpaars.
Versuchen Sie Folgendes:
%Vor%Warum speichern Sie Hexadezimalwerte als Zeichenfolgen? es wäre eine viel bessere Idee, Hexadezimalzahlen als Hexadezimalzahlen oder Longs darzustellen.
Die Tatsache, dass es ein korrektes Ergebnis liefert, ist ein Artefakt der speziellen Zeichencodierung für Ziffern und Buchstaben. Sie sollten die Zahlen in BigInteger
, XOR
sie konvertieren und zurück in String
:
BEARBEITEN (als Antwort auf Jon Skeets Kommentar): Verwenden von BigInteger
anstelle von int
, um das Vier-Byte-Limit-Problem zu beheben.
Eine weitere Option, die abhängig von der Größe der Zeichenfolgen hilfreich sein kann
%Vor%Tags und Links java cryptography