这个PHP加密代码中使用的函数的C#等价物是什么?

时间:2010-07-18 17:10:59

标签: c# php encryption

我一直在使用codeigniter(PHP框架)的加密类,需要将PHP中的这些函数转换为C#。 这样我的C#应用​​程序就可以解密我网站数据库中的数据,反之亦然。

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

如果我可以转换这三个函数,我相信我可以自己完成相反的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);
}

1 个答案:

答案 0 :(得分:4)

我会给你一些小提示。所有类似C的构造和运算符都按原样,其他:

  • strlen - String.Length
  • substr - String.Substring
  • 。 - +,。= - +=
  • chr(c) - (byte)c
  • ord(i) - (char)i