2010-08-31 140 views
12

這不是安全問題。這也不是讓它難以打破。我正在尋找一種簡單的算法來改變一個字符串(一個網址)的方式,它不像原文。 加密將使用JavaScript完成。然後我想喂加密的字符串到PHP函數將其更改回原始。兩端可以共享一個祕密密鑰,或者轉換可以是無鑰匙的,只依賴邏輯。簡單的Javascript加密,使用共享密鑰進行PHP解密

理想的解決方案

  1. 將簡單
  2. 將使用可用的JavaScript函數進行加密
  3. 將使用可用的PHP函數用於解密
  4. 將產生加密的字符串中的方式不是像普通文字根本
  5. 將只使用加密字符串中的小寫字母字符和數字
  6. 不是廣泛使用的方法,如Base64-ing作爲加密。

編輯:最後一項要求是在shamittomar的答案後面加上的。

+0

通過在JavaScript這樣客戶可以很容易地查看源並解密您的加密字符串。 – Chris 2010-08-31 12:30:40

+0

@Chris - 這不會造成問題;正如我在問題中所說的那樣,這不是出於安全或保密的原因。 – 2010-08-31 12:36:16

+0

這就是爲什麼我僅將它作爲評論發佈,以確保您知道這一切。正如其他人所說的任何哈希算法您的JavaScript和PHP可用將工作得很好。 md5,base64,sha都會工作。 – Chris 2010-08-31 12:37:02

回答

11

如果這就是你想要的,你可以Base64編碼和解碼。

[編輯]:OP澄清後:

當你不希望廣泛使用的方法,這裏是一個很少使用方法,並可以通過只使用小寫字母給輸出爲你做它和數字。它是Base32 Encode/Decode。使用以下庫:

+0

謝謝。我可能應該在我的問題中說明廣泛使用的轉換方法是不適合的。我會編輯我的問題來澄清這一點。 – 2010-08-31 12:38:57

+0

@Majid,回答已更新。 – shamittomar 2010-08-31 12:43:10

+0

謝謝!我可能會鏈接不止一種方法來獲得它的獨特性。 – 2010-08-31 12:52:03

1

你打算如何實現(隱藏)在Javascript中的祕密?恕我直言,這是不可能的。

編輯:確定 - 不是關於安全性,那麼只需使用任何baseXX或腐蝕編碼機制。但你真的不能說這些algorythms之一不會是衆所周知的...

+0

客觀不是隱藏祕密 – 2010-08-31 12:33:25

+0

@Majid如果密鑰不是祕密,那麼加密的用法是什麼? – Max 2010-08-31 12:34:27

+0

我認爲他的意思是哈希不加密。 – Chris 2010-08-31 12:37:20

5

如果它不是關於安全性,而不是有關使其難以突破,那麼怎麼樣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提供了一個原生功能,str_rot13http://php.net/manual/en/function.str-rot13.php

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

但OP希望使用'URL'作爲輸入。而'Rot-13'則保留*非字母字符*。這可能會輸出'/'和':'字符,但是OP只需要輸出*小寫和數字*。另外,由於非alpha字符是未觸及的,所以預測編碼字符串是一個URL非常簡單。 – shamittomar 2010-08-31 12:48:35

+0

+1謝謝。將成爲一個鏈條中的好腿。 – 2010-08-31 12:53:04

+0

@shamittomar,當這個答案被提出時,沒有關於URL的評論作爲輸入。根據要求,我基本回答了問題。 – Fosco 2010-08-31 13:48:46

23

可以在PHP中使用按位異或在JavaScript字符串編碼,並再次將其重新解碼。我爲你寫了一個小例子。它在PHP中的工作原理是一樣的。如果再次用已編碼的字符串調用enc(),則會再次獲得原始字符串。

<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> 

在PHP中做這樣的事情(注意,這不是測試,這是一個很長一段時間,因爲我做了PHP):

$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謝謝你Ridcully,我很欣賞你付出​​的努力和時間。 – 2010-08-31 12:56:43

+0

+1謝謝................. – 2011-11-24 04:10:24

+0

PHP方面如何工作?新的這個..但與它混淆說:「它在PHP中工作是一樣的」。當我查找XOR時,它也有一個鍵 – Jason 2012-08-02 12:09:54

相關問題