Каковы эквиваленты C # функций, используемых в этом коде шифрования PHP? - PullRequest
1 голос
/ 18 июля 2010

Я уже некоторое время использую класс шифрования codeigniter (фреймворк PHP) и мне нужно преобразовать эти функции в PHP в C #.Это связано с тем, что мое приложение на 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);
}

1 Ответ

4 голосов
/ 18 июля 2010

я дам вам небольшой совет.все C-подобные конструкции и операторы идут как есть, другие:

  • strlen - String.Length
  • substr - String.Substring
  • .- +,. = - +=
  • chr (c) - (byte)c
  • ord (i) - (char)i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...