2012-05-02 44 views
3

我需要通過URL傳遞一些加密值。有什麼辦法可以避免加密後獲得的值中的某些字符,如斜槓(/)?因爲在codeigniter中,諸如斜槓之類的字符用於分隔URL中的參數。請注意,我不希望任何建議,不經過加密的字符串中的URL :)在codeigniter中加密時避免使用特定字符?

+0

我想要的是一種編碼或加密方法,它不會在結果中產生斜線(/)。 – Stranger

回答

-2

你想要的不是一個加密(這意味着安全),而是一個編碼。在實踐中,你的選擇基本上是:(如果你希望字符串是有點清晰使用此這也將使你比其他兩個選項一個較短的字符串)

  • 進行urlencode
  • 的base64 (如果你不希望字符串清晰並且想要節省字符串中的空間,可以使用它)
  • 十六進制(如果您不希望字符串清晰且不關心關於字符串長度)

我不會選擇十六進制。決定是否要讓字符串清晰可辨,並首先選擇其中的一個。

+4

什麼是難以理解的:OP有en加密字符串(是,加密,CI有一個本地加密類,他可能正在使用它),現在想把它傳遞給url。什麼讓你認爲OP不知道編碼和加密之間的區別? –

+0

雅我需要一個編碼,但不會產生斜線等值。 – Stranger

+0

好道歉,我現在明白字符串已經被加密,然後需要編碼。對於那個很抱歉。 – alexg

0

一個想法是僅使用0-9和a-f以及可選的x表示加密的字符串爲十六進制。

但我建議您使用TLS(更好的SSL)來保護您的數據,因爲現在您可能使用JS加密數據,因此密鑰對攻擊者可見。

不要調用當前方案安全或加密,而只是模糊處理。

+0

OP詢問如何將加密的字符串傳遞給url,而不是如何加密,以及如何保護數據;他正在加密(CI有一個本機加密類,他可能會使用它),現在需要傳遞加密數據而不會弄亂路由器類 –

4
class MY_Encrypt extends CI_Encrypt 
{ 

    function encode($string, $key="", $url_safe=TRUE) 
    { 
     $ret = parent::encode($string, $key); 

     if ($url_safe) 
     { 
      $ret = strtr(
        $ret, 
        array(
         '+' => '.', 
         '=' => '-', 
         '/' => '~' 
        ) 
       ); 
     } 

     return $ret; 
    } 


    function decode($string, $key="") 
    { 
     $string = strtr(
       $string, 
       array(
        '.' => '+', 
        '-' => '=', 
        '~' => '/' 
       ) 
      ); 

     return parent::decode($string, $key); 
    } 
} 

-

$key = $this->config->item('encryption_key'); 

$outboundlink = urlencode($this->encrypt->encode($segment, $key, TRUE)); 

$inboundlink = rawurldecode($this->encrypt->decode($segment, $key)); 
-1

這不是正確的方法,但它可以幫助你很多。我爲此做了一些交替的方法。

<html> 
<a href="<?= base_url('controller/category/').$this->encrypt->encode($category_men_top->category_id);?>">Category Name</a> 
</html> 

public function category() 
{ 
    $count=$this->uri->total_segments(); //getting total number of segment 
    $id=''; //assigning value 
    for ($i=3; $i<=$count ; $i++) { 
     $id=$id.$this->uri->segment($i).'/'; 
    } 
    $id=rtrim($id,"/"); // removing '/' from the end of the whole string 
    echo "$id"; 
    echo "<br>"; 
    echo $this->encrypt->decode($id); 
} 
相關問題