2010-07-18 37 views
1

我一直在使用codeigniter(PHP框架)的加密类,并需要将这些函数在PHP中转换为C#。 这使我的C#应用​​程序可以解密我的网站数据库上的数据,反之亦然。这个PHP加密代码中使用的C#等价函数是什么?

问题是,我最近开始使用C#,所以不真正知道将做与PHP一样的函数名称。

如果我可以转换这3个函数,我相信我可以自己完成相反的3个函数,因为它们使用的功能相当接近。

注:请不要尝试使用比玩其他周围这些功能 - 它们并不强大的加密(事实上,使用的方法甚至可以计算机发明之前打破)。

/** 
* XOR Encode 
* 
* Takes a plain-text string and key as input and generates an 
* encoded bit-string using XOR 
* 
* @access private 
* @param string 
* @param string 
* @return string 
*/ 
function _xor_encode($string, $key) 
{ 
    $rand = ''; 
    while (strlen($rand) < 32) 
    { 
     $rand .= mt_rand(0, mt_getrandmax()); 
    } 

    $rand = $this->hash($rand); 

    $enc = ''; 
    for ($i = 0; $i < strlen($string); $i++) 
    {   
     $enc .= substr($rand, ($i % strlen($rand)), 1).(substr($rand, ($i % strlen($rand)), 1)^substr($string, $i, 1)); 
    } 

    return $this->_xor_merge($enc, $key); 
} 

    /** 
* XOR key + string Combiner 
* 
* Takes a string and key as input and computes the difference using XOR 
* 
* @access private 
* @param string 
* @param string 
* @return string 
*/ 
function _xor_merge($string, $key) 
{ 
    $hash = $this->hash($key); 
    $str = ''; 
    for ($i = 0; $i < strlen($string); $i++) 
    { 
     $str .= substr($string, $i, 1)^substr($hash, ($i % strlen($hash)), 1); 
    } 

    return $str; 
} 

/** 
* Adds permuted noise to the IV + encrypted data to protect 
* against Man-in-the-middle attacks on CBC mode ciphers 
* http://www.ciphersbyritter.com/GLOSSARY.HTM#IV 
* 
* Function description 
* 
* @access private 
* @param string 
* @param string 
* @return string 
*/ 
function _add_cipher_noise($data, $key) 
{ 
    $keyhash = $this->hash($key); 
    $keylen = strlen($keyhash); 
    $str = ''; 

    for ($i = 0, $j = 0, $len = strlen($data); $i < $len; ++$i, ++$j) 
    { 
     if ($j >= $keylen) 
     { 
      $j = 0; 
     } 

     $str .= chr((ord($data[$i]) + ord($keyhash[$j])) % 256); 
    } 

    return $str; 
} 


/** 
* Hash encode a string 
* 
* @access public 
* @param string 
* @return string 
*/ 
function hash($str) 
{ 
    return ($this->_hash_type == 'sha1') ? sha1($str) : md5($str); 
} 
+3

糟糕!你正在实现自己的加密算法吗? – Thomas 2010-07-18 17:14:30

+2

这是CodeIgnitEr – quantumSoup 2010-07-18 17:16:26

+3

这样做是通过将文本视为二进制数据来处理?双y! – 2010-07-18 17:16:49

回答

4

我给你小提示。所有的C类结构和运营商走的就是其他:

  • strlen的 - String.Length
  • SUBSTR - String.Substring
  • 。 - +,= - 。+=
  • CHR(C) - (byte)c
  • ORD(ⅰ) - (char)i
+0

感谢您在正确的方向! – arbme 2010-07-18 17:21:59

相关问题