2010-08-31 15 views
12

Dies ist nicht über Sicherheit. Es ist auch nicht schwer zu brechen. Ich suche nach einem einfachen Algorithmus, um eine Zeichenkette (eine URL) so zu ändern, dass sie nicht dem Original ähnelt. Die Verschlüsselung wird mit Javascript durchgeführt. Dann möchte ich die verschlüsselte Zeichenfolge an eine PHP-Funktion füttern, um sie wieder auf das Original zu ändern. Beide Enden könnten einen geheimen Schlüssel teilen, oder die Konvertierungen könnten ohne Schlüssel sein und nur auf Logik beruhen.Einfaches Javascript verschlüsseln, PHP entschlüsseln mit gemeinsamem geheimen Schlüssel

Die ideale Lösung

  1. zur Verfügung PHP-Funktionen für einfach
  2. werden Nutzung stehen zur Verfügung JavaScript-Funktionen für die Verschlüsselung
  3. Entschlüsselung verwenden
  4. wird in Art und Weise verschlüsselten String erzeugen nicht die Ebene zu ähneln Text überhaupt
  5. verwendet nur Kleinbuchstaben und Ziffern in der verschlüsselten Zeichenfolge
  6. ist keine weit verbreitete Methode wie Base64-ing als Verschlüsselung.

Bearbeiten: Die letzte Anforderung wurde nach shamittomar 's Antwort hinzugefügt.

+0

Damit ein Kunde leicht in Javascript tun die Quelle sehen können und entschlüssle deine verschlüsselte Zeichenfolge. – Chris

+0

@Chris - Das wäre kein Problem; wie ich in der Frage gesagt habe, ist dies nicht aus Gründen der Sicherheit oder Geheimhaltung. –

+0

Deshalb habe ich es nur als Kommentar gepostet, um sicherzugehen, dass Sie sich dessen bewusst sind. Wie andere gesagt haben, wäre jeder Hash-Algorithmus, den Ihr Javascript und PHP zur Verfügung haben, gut funktionieren. md5, base64, sha wird alles funktionieren. – Chris

Antwort

11

Wenn das ist, was Sie wollen, können Sie Base64 kodieren und dekodieren.

[EDIT]: Nach der OP Klarstellung:

Wie man hier nicht weit verbreitete Methoden wollen, ist ein selten verwendete Methode und das kann es für Sie tun Ausgabe nur in Kleinbuchstaben, indem sie und ZAHLEN. Es ist Base32 Encode/Decode. Verwenden Sie die folgenden Bibliotheken:

+0

Danke. Ich hätte es wahrscheinlich in meiner Frage angeben sollen, dass weit verbreitete Konvertierungsmethoden nicht geeignet sind. Ich werde meine Frage bearbeiten, um dies zu klären. –

+0

@Majid, Antwort aktualisiert. – shamittomar

+0

Danke! Ich werde wahrscheinlich mehr als eine Methode verketten, um sie einzigartig zu machen. –

1

Wie planen Sie, das Geheimnis in Javascript zu implementieren (verstecken)? IMHO ist es nicht möglich.

Edit: OK - nicht über Sicherheit .. dann verwenden Sie einfach eine BaseXX oder Rot Codierungsmechanismus. Aber Sie können nicht wirklich sagen, dass einer dieser Algorythmen nicht gut bekannt wäre ...

+0

Das Ziel ist nicht, das Geheimnis zu verstecken –

+0

@Majid was ist die Verwendung der Verschlüsselung, wenn der Schlüssel nicht geheim ist? – Max

+0

Ich denke, er meint Hash nicht verschlüsseln. – Chris

5

Wenn es nicht um die Sicherheit und nicht um es schwer zu brechen machen, dann, wie etwa ROT-13?

//+ Jonas Raoni Soares Silva 
//@ http://jsfromhell.com/string/rot13 [rev. #1] 

String.prototype.rot13 = function(){ 
    return this.replace(/[a-zA-Z]/g, function(c){ 
     return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26); 
    }); 
}; 

... 

var s = "My String"; 

var enc = s.rot13(); // encrypted value in enc 

PHP hat eine native Funktion, str_rot13: http://php.net/manual/en/function.str-rot13.php

$decrypted = str_rot13($_GET['whatever']); 
+1

Aber OP möchte eine 'URL' als Eingabe verwenden. Und 'Rot-13' lässt die * Nicht-Alpha-Zeichen unberührt *. Dies kann '/' und ':' Zeichen ausgeben, aber OP möchte nur * Kleinbuchstaben und Zahlen * ausgeben. Da nicht alphanumerische Zeichen unberücksichtigt bleiben, ist es sehr einfach vorauszusagen, dass die codierte Zeichenfolge eine URL ist. – shamittomar

+0

+1 Danke. Wird ein gutes Bein in einer Kette sein. –

+0

@shamittomar, es gab keinen Kommentar zu einer URL als Eingabe, als diese Antwort erfolgte. Ich antwortete grundsätzlich ironisch auf die Anforderungen. – Fosco

23

Sie bitweise XOR in Javascript verwenden, um die Zeichenfolge wieder in PHP zu kodieren, um es wieder zu entschlüsseln. Ich habe ein kleines Javascript-Beispiel für dich geschrieben. Es funktioniert genauso in PHP. Wenn Sie enc() ein zweites Mal mit der bereits codierten Zeichenfolge aufrufen, erhalten Sie die ursprüngliche Zeichenfolge erneut.

<html> 
<head><title></title></head> 
<body> 
<script type="text/javascript"> 
function enc(str) { 
    var encoded = ""; 
    for (i=0; i<str.length;i++) { 
     var a = str.charCodeAt(i); 
     var b = a^123; // bitwise XOR with any number, e.g. 123 
     encoded = encoded+String.fromCharCode(b); 
    } 
    return encoded; 
} 
var str = "hello world"; 
var encoded = enc(str); 
alert(encoded);   // shows encoded string 
alert(enc(encoded));  // shows the original string again 
</script> 
</body> 
</html> 

In PHP tun so etwas wie dieses (Vorsicht, das ist nicht getestet und es war eine lange Weile her, seit ich PHP tat):

$encoded = "..."; // <-- encoded string from the request 
$decoded = ""; 
for($i = 0; $i < strlen($encoded); $i++) { 
    $b = ord($encoded[$i]); 
    $a = $b^123; // <-- must be same number used to encode the character 
    $decoded .= chr($a) 
} 
echo $decoded; 
+2

+1 Vielen Dank Ridcully, ich schätze den Aufwand und die Zeit, die Sie in dieses setzen. –

+0

+1 Dank ................. –

+0

Wie funktioniert die PHP-Seite? neu zu diesem .. aber verwirrt damit sagen: "Es funktioniert das gleiche in PHP". Wenn ich nach XOR suche, hat es auch einen Schlüssel – Jason

Verwandte Themen