Часто задаваемые вопросы и ответы по C/C++/Visual C++
Последнее обновление: 27.08.2003
FAQ по C/C++/Visual C++
Работа с сетью
Как хешировать данные
Составители: SUnteXx, Leprecon
Как хешировать данные
A: (SUnteXx)
Оригинальная ссылка: нету

Ударила мне тут в голову нечто желтое и пенное (не все то пиво, что желтое и пенное), и решил помочь человеку из форума зашифровать данные. Этому челу посоветовали шифровать методом XOR. Именно это я и сделал.

Вот что получилось у меня:
#include <stdio.h>
#include <conio.h>

void code(char* lpName, char* lpPassword, char* lpResult)
// Функция хеширует данные, т.е. превращает в нечто страшное %), не понятное без поллитра!
{
    unsigned int a = 0, b = 0;
    a = 0;
    while (lpResult[a]) // мое извращение. читается как "пока существует строка lpResult"
    {
        b = 0;
        while (lpPassword[b]) // пока существует строка lpPassword
        {
            lpResult[a] ^= (lpPassword[b] + (a*b)); // хэшируем простым XOR'ом
            b++; // идем к следующему символу lpPassword
        }
        a++; // идем к следующему символу lpResult
    }
}

void main(void)
{
    char szName[100];
    char szPassword[20];
    char szResult[100];

    printf("Enter your name: "); // просим юзера ввести свое имя
    scanf("%s", szName); // вводит юзер имя

    printf("Enter your password: "); // просим ввести пароль
    scanf("%s", szPassword); // вводит

    unsigned int a = 0;
/***     Далее идет функция копирования одной строки в другую     ***/
    while (szName[a])
    {
        szResult[a] = szName[a];
        a++;
    }
    szResult[a] = 0;
/*** все, скопировали. Можно так же юзать strcpy(szResult, szName) ***/
// Просто захотелось поизвращаться %))
    
    code(szName, szPassword, szResult); // хэшируем данные
    printf ("\r\n\r\nEncoded: %s\r\n", szResult); // ввыводим получившуюся хрень

    code(szName, szPassword, szResult); // расхэшируем данные
    printf ("Decoded: %s\r\n", szResult); // выводим получившуюся хрень

    printf ("\r\n", szResult); // выводим пробел

    printf("Press any key to continue"); // просим нажать any key на клавиатуре
    while (!_getch()); // ждем, пока юзверь не кликнул any key

    return;
}
А далее не по делу :)

Тут базарил с девушкой по телефону, параллельно писАл прогу. Потестил, вроде работает. Удивился, но да ладно. Спрашиваю у нее:
- Скажи какое-нибудь имя
- Саша, - говорит она (это ее имя - прим. меня)
- А теперь пароль
- Саша, - говорит она (она человек далекий от компьютера и пароли приходится придумывать редко - прим. меня)

А сам тем временем пока она говорит имена и пароли ввожу их. Некоторые слова так хорошо шифровались, что было весело.
Теперь попробуйте ввести эти данные:
Name: Sasha
Password: Sasha

Как вам ответ? У меня получилось "<+3:)". Клевый смайл, не так ли?
Содержание Обсудить на форуме « Предыдущая статья | Следующая статья »
Перейти к FAQ:  
FAQ составлен по материалам Форума на Исходниках.Ру.
Copyright © 2002 by Sources.ru. All rights reserved.