Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

XOR in PHP

0 views
Skip to first unread message

Suther

unread,
Nov 2, 2009, 2:20:01 PM11/2/09
to
Ich muss folgendes in PHP abbilden (das hinter dem = muss also nach dem xor
in php rauskommen:

Xor(41d7b0eb421e6d1317d7da8fe2577bbe,d7c13f5cd327eb61280c3fe5e67b4364)
=96168fb7913986723fdbe56a042c38da

Ich habe schon einiges Versucht, aber immer kommen auf der Webseite nur
Hyroglyphen raus.
hab auch schon munter mit hexdec, decbin, bindec dechex rumgespielt, kein
resultat.

Kann mir jemand von Euch helfen? Selbst im php-irc auf freenode (500 User)
konnte keiner helfen.


Ulf [Kado] Kadner

unread,
Nov 2, 2009, 3:25:00 PM11/2/09
to
Hallo Suther! Du schriebst:

> Ich muss folgendes in PHP abbilden (das hinter dem = muss also nach dem
> xor in php rauskommen:
>
> Xor(41d7b0eb421e6d1317d7da8fe2577bbe,d7c13f5cd327eb61280c3fe5e67b4364)
> =96168fb7913986723fdbe56a042c38da

Ist doch easy:

$str1 = '41d7b0eb421e6d1317d7da8fe2577bbe';
$eles = array();
$str2 = 'd7c13f5cd327eb61280c3fe5e67b4364';
for ($i = 0; $i < 32; $i += 2)
{
$eles[] = dechex(hexdec(substr($str1, $i, 2))
^ hexdec(substr($str2, $i, 2)));
}
echo join($eles);

MfG, Ulf

Sam Kang

unread,
Nov 2, 2009, 3:34:16 PM11/2/09
to
Ulf [Kado] Kadner schrieb:


> $eles[] = dechex(hexdec(substr($str1, $i, 2))

nicht ganz das dechex u.u. für Wetre < 16 nur ein Zeichen zurückgibt.

daher besser so:

$str1 = '41d7b0eb421e6d1317d7da8fe2577bbe';
$str2 = 'd7c13f5cd327eb61280c3fe5e67b4364';
$xor=''


for ($i = 0; $i < 32; $i += 2)
{

$xor.=sprintf("%02x",hexdec(substr($str1, $i, 2))
^ hexdec(substr($str2, $i, 2)));
}
echo $xor;

Sam


--
Fortgeschrittene Inkompetenz ist nicht zu Unterscheiden von Boshaftigkeit.
(J. Porter Clark)

Ulf [Kado] Kadner

unread,
Nov 2, 2009, 3:40:58 PM11/2/09
to
Hallo Sam Kang! Du schriebst:

> Ulf [Kado] Kadner schrieb:
>> $eles[] = dechex(hexdec(substr($str1, $i, 2))
>
> nicht ganz das dechex u.u. für Wetre < 16 nur ein Zeichen zurückgibt.

Es ging um das was im OP steht! Geau dort besteht das Problem nicht. Er
schrieb nix von allgemeiner Verwendung.

Ist natürlich OK das Du darauf hinweist. Aber wie gesagt an meiner Lösung
ist für seinen speziellen Fall nix auszusetzen.

MfG, Ulf

Sam Kang

unread,
Nov 2, 2009, 4:19:48 PM11/2/09
to
Ulf [Kado] Kadner schrieb:

> Ist natürlich OK das Du darauf hinweist. Aber wie gesagt an meiner Lösung
> ist für seinen speziellen Fall nix auszusetzen.

Naja

16 x dechex(1) ='1111111111111111';

16 x sprintf("%02x",1) = '01010101010101010101010101010101';

ist halt hat nur ein klitze kleiner zu vernachlässigender Unterschied.

Der OP wollte zwei 64 Bit Integer XORern. Das ist weder allgemein noch
speziell. Zwischendurch ein paar 4 bit Nibbels wegzulassen nur weil sie 0
sind, ist eine nicht zu vertretende Diskriminierung des Wertes 0.

btw. warum gleich eingeschnappt?

Sam.

Sam Kang

unread,
Nov 2, 2009, 4:23:17 PM11/2/09
to
Sam Kang schrieb:

> Der OP wollte zwei 64 Bit Integer XORern.

Korrektur: 128 Bit

Sam

Ulf [Kado] Kadner

unread,
Nov 3, 2009, 3:16:21 AM11/3/09
to
Hallo Sam Kang! Du schriebst:

> btw. warum gleich eingeschnappt?

Ich? Sollte ich das?

Hab einfach nur meine Beweggründe genannt warum ich es nicht in der Form
wie Du geschrieben hab. Mit eingeschnappt hat das nix zu tun.

MfG, Ulf

Suther

unread,
Nov 4, 2009, 5:28:32 AM11/4/09
to

Danke Euch für die Hilfe, habe es nun mit der Funktion
gmp_xor() vom php-zusatzmodul gemacht. Diese kann auch große zeichenfolgen
sauber bearbeiten.

Danke nochmal an alle für Ihre Infos

0 new messages