Link verschlüsseln

  • Themenstarter Themenstarter DEDEX7200Pro
  • Beginndatum Beginndatum
D

DEDEX7200Pro

Hallo Leute, ich wollte einen Link verschlüsseln, sodass man nicht mehr erkennen kann, auf was verlinkt wird; habe jetzt aber ein Problem:

PHP:
<?php
function callback($buffer)
{
include ("crypter.php");

$suchmuster = array();
$suchmuster[1] = '/<a href=\"([^>]+?)\">(.+[^>]+?)<\/a>/';

$link = x0rencrypt('\1', $schluessel);
$name = '\2';

$ersetzungen = array();
$ersetzungen[1] = "<a href=\"output.php?link=$link\">$name</a>";

return preg_replace($suchmuster, $ersetzungen, $buffer);
}

ob_start("callback");
$links = "<a href=\"http://www.link.de\">http://www.link.de</a>";
echo $links;
ob_end_flush();
?>

Die Crypter.php sieht in etwa so aus:

PHP:
<?php
function x0rcrypt($baselink, $schluessel) { 
    if (strlen($schluessel) == 0) { 
        return; 
    } 
    $ergebnis = ''; 
    $i = 0; 
    while ($i < strlen($baselink)) { 
        for ($j=0; $j < strlen($schluessel); $j++) { 
            if ($i >= strlen($baselink)) { 
                break; 
            } 
            $ergebnis .= $baselink{$i} ^ $schluessel{$j}; 
            $i++; 
        } 
    } 
    return($ergebnis); 
} 

function hex2bin($string) { 
    return pack('H*', $string); 
} 

function x0rencrypt($baselink, $schluessel) { 
    return bin2hex(x0rcrypt($baselink, $schluessel)); 
} 

function x0rdecrypt($baselink, $schluessel) { 
    return x0rcrypt(hex2bin($baselink), $schluessel); 
} 

$schluessel = 'geheimesganzlangesultrakompliziertesPasswortdasniemandkenntundauchniemandhackensolltedaesganzganzwichticgfürmeineverschlüsselungistundeinlangerschlüsselderauszahlenundbuchstabenbestehterhöhtdiesicherheitbeimverschlüsselnundhilftmirbeidiversendingen'; 
?>

Jetzt zu meinen Problem. Das verschlüsseln und dann das entschlüsseln mit ner einfachen $_GET['link']-php-Datei [-->output.php-Datei] geht ohne Probleme. Jedoch wurde nicht der Link, sondern '\1' verschlüsselt, welcher normalerweise dem Link entsprechen sollte. '\2' ist der Name des links. Wenn ich die Verschlüsselung rausnehme geht es.
 
du weißt der Variable $link das Ergebnis der Funktion x0rencrypt zu - diese Funktion macht genau was sie soll.
Sie verschlüsselt den von dir übergebenen Wert \1, passt also.

dein preg_replace sieht demnach so aus:

PHP:
Search:  '/<a href=\"([^>]+?)\">(.+[^>]+?)<\/a>/'
Replace: "<a href=\"output.php?link=36b4\">$name</a>"
Subject: $buffer

Da verwundert es natürlich nicht, dass auch genau das raus kommt.

ich hab's mal etwas umgeschrieben - jetzt kommt auf der output.php auch http://www.link.de raus:
PHP:
<?php
function callback($buffer)
{
  include ("crypter.php");
  
  $suchmuster = '/<a href=\"([^>]+?)\">(.+[^>]+?)<\/a>/';
  $ersetzungen = "\\1||\\2";
  
  $link = explode("||",preg_replace($suchmuster, $ersetzungen, $buffer));
  $name = $link[1];
  $link = x0rencrypt($link[0],$schluessel);
  return = "<a href=\"output.php?link=".$link."\">".$name."</a>";
  
}

ob_start("callback");
$links = "<a href=\"http://www.link.de\">http://www.link.de</a>";
echo $links;
ob_end_flush();
?>


Grüße
 
vielen Dank; genau das war mein Problem^^ Hier habe ich dann deinen Script berichtigt:

PHP:
<?php
function callback($buffer)
{
include ("crypter.php");

$suchmuster = '/<a href=\"([^>]+?)\">(.+[^>]+?)<\/a>/';
$ersetzungen = "\\1||\\2";
  
$link = explode("||",preg_replace($suchmuster, $ersetzungen, $buffer));
$name = $link[1];
$link = x0rencrypt($link[0],$schluessel);
return "<a href=\"output.php?link=$link\">$name</a>"; 
}

ob_start("callback");
$links = "<a href=\"http://www.link.de\">http://www.link.de</a>";
echo $links;
ob_end_flush();
?>

Edit: Was mache ich, wenn ich nicht nur die Links bearbeiten will? Also das auch der ganz normale Text wieder zurück gegeben wird? return buffer doch eigentlich. Wie mache ich des dann mit der Ersetzung?

Edit 2: Würde dies dann so stimmen?

PHP:
<?php
function callback($buffer)
{
include ("crypter.php");

$suchmuster = '/<a href=\"([^>]+?)\">(.+[^>]+?)<\/a>/';
$explodo = "\\1||\\2";

$link = explode("||",preg_replace($suchmuster, $explodo, $buffer));
$name = $link[1];
$link = x0rencrypt($link[0],$schluessel);
$ersetzungen = "<a href=\"output.php?link=$link\">$name</a>";
return preg_replace($suchmuster, $ersetzungen, $buffer); 
}

ob_start("callback");
$links = "<a href=\"http://www.link.de\">http://www.link.de</a>";
echo $links;
ob_end_flush();
?>

Edit3:
PHP:
<?php
function callback($buffer)
{
include ("crypter.php");

$suchmuster = '/<a href=\"([^>]+?)\">(.+[^>]+?)<\/a>/';
$explodo = "\\1||\\2";

$link = explode("||",preg_replace($suchmuster, $explodo, $buffer));
$name = $link[1];
$link = x0rencrypt($link[0],$schluessel);
$ersetzungen = "<a href=\"output.php?link=$link\">$name</a>";
return preg_replace($suchmuster, $ersetzungen, $buffer); 
}

ob_start("callback");
$links = "<a href=\"http://www.link.de\">http://www.link.de</a><br/>Achim macht en Test<br/><a href=\"http://www.link2.de\">http://www.link2.de</a>";
echo $links;
ob_end_flush();
?>

Irgendwie nicht; denn ich möchte, dass der Text normal zurückgegeben wird und das nur die Links, aber halt auch mehrere über meine output.php führen. Trotzdem mal danke
 
Zuletzt bearbeitet von einem Moderator:
Also ohne Verschlüsseln wäre dies nun so bei mir:

PHP:
<?php
function callback($buffer)
{
$suchmuster = array();
$suchmuster[0] = '/<a href=\"([^>]+?)\">([^>]+?)<\/a>/';

$link = '\1';
$name = '\2';

$ersetzungen = array();
$ersetzungen[0] = "<a href=\"output.php?link=$link\">$name</a>";

return preg_replace($suchmuster, $ersetzungen, $buffer);
}

ob_start("callback");
include ("start.php");
ob_end_flush();
?>

Mit Verschlüsselung wird folgen^^
 
habs bisher so erweitert:

PHP:
<?php
include ("crypter.php");
$buffer = "<a href=\"http://www.ebay.de\">ebay</a><br/><a href=\"http://www.amazon.de\">amazon</a>";

$search = '/<a href=\"([^>]+?)\">([^>]+?)<\/a>/';
$explode = "\\1|\\2|";

$test = preg_replace($search, $explode, $buffer);

$baselink = explode("|", $test);
$name = $baselink[1];
$link = x0rencrypt($baselink[0],$schluessel);

$suchmuster = array();
$suchmuster[1] = '/<a href=\"([^>]+?)\">([^>]+?)<\/a>/';

$ersetzungen = array();
$ersetzungen[1] = "<a href=\"output.php?link=$link\">$name</a>";

echo preg_replace($suchmuster, $ersetzungen, $buffer);
?>

Mein Problem ist, dass Link 1 gleich Link 2 ist, weil Name und Link ja immer vom $baselink[1] und $baselink[0] kommen; bei Link 2 müsste es aber 3 und 2 sein. Wie ich des mitm Namen klär ist recht einfach, indem ich dann $name = "\\2" mache; aber wie mache ich des mit dem Link?


Edit:
Habe auch folgendes versucht:
PHP:
<?php
include ("crypter.php");
$buffer = "<a href=\"http://www.ebay.de\">ebay</a><br/><a href=\"http://www.amazon.de\">amazon</a>";

$search = '/<a href=\"([^>]+?)\">([^>]+?)<\/a>/';
$explode = "\\1|\\2|";

$test = preg_replace($search, $explode, $buffer);

$linkid = "\\1";
$baselink = explode("|", $test);
$zahl = array_search("\\1", $baselink);

//Soll statt $baselink[0] auch $baselink[2]; +++ als den entsprechenden Link verwenden; klappt net
if ($linkid = $baselink[$zahl]) {
$link = x0rencrypt($baselink[$zahl],$schluessel);
}

$name = "\\2";

$suchmuster = array();
$suchmuster[1] = '/<a href=\"([^>]+?)\">([^>]+?)<\/a>/';

$ersetzungen = array();
$ersetzungen[1] = "<a href=\"output.php?link=$link\">$name</a>";

echo preg_replace($suchmuster, $ersetzungen, $buffer);
?>
 
Zuletzt bearbeitet von einem Moderator:
Hier möchte ich euch nun meine (eigentlich wenn mans sichs genauer überlegt) einfache Lösung vorstellen:

PHP:
<?php
$buffer = "<a href=\"http://www.ebay.de\">ebay</a><br/><a href=\"http://www.amazon.de\">amazon</a>";

function link_output($treffer) {
include ("crypter.php");
$link = x0rencrypt($treffer[1],$schluessel);
$name = $treffer[2];
  return "<a href=\"output.php?link=$link\">$name</a>";
}

echo preg_replace_callback(
            "|<a href=\"([^>]+?)\">([^>]+?)<\/a>|",
            "link_output",
            $buffer);
?>

Edit: Und wer natürlich nicht $buffer, sondern eine ganze Datei haben möchte (oder ein ganzen Script; Inhalt von ob_start - ob_end); der kann dies so anwenden:
PHP:
<?php
function callback($buffer)
{
function link_output($treffer) {
include ("crypter.php");
$link = x0rencrypt($treffer[1],$schluessel);
$name = $treffer[2];
  return "<a href=\"output.php?link=$link\">$name</a>";
}

$buffer = preg_replace_callback(
            "|<a href=\"([^>]+?)\">([^>]+?)<\/a>|",
            "link_output",
            $buffer);
return $buffer;
}

ob_start("callback");
include ("start.php");
ob_end_flush();
?>
 
Zuletzt bearbeitet von einem Moderator:
Zurück