Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Шифрование/дешифрование ХОR-ом

Поиск:
Код

//////////////////////////////////////////////////////////////////////////////
//
//  Encrypting/decrypting file (xor method)
//
//  (c) Johna Smith, 1996
//
//  Method description:
//    1) Get the key code (this is the main code for crypting)
//    2) Crypt part of text using formula str'=str xor keycode
//    3) Repeat step 2 for all parts of text
//
//   (a xor b) xor b = a -> encrypting==decrypting
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <errno.h>

void usage(void)
{
  // show how to use this program if there isn't enough parameters
  printf("Usage: xorcrypt.exe filename1 filename2 keyn");
  printf("filename1 - name of source filen");
  printf("filename2 - name of destination filen");
  printf("key - key code, can be up to 20 characters (without spaces)n");
  printf("nExample: xorcrypt.exe xorcrypt.cpp xorcrypt.crp SAMPLEKEYCODEn");
}

FILE *input, *output;
char keycode[20];
char keycodelength;

void encrypt(void)
{
  unsigned char ch;
  char j=0;
  unsigned long int counter=0;

  fread(&ch,sizeof(char),1,input);
  do
  {
    // processing char
    ch=(ch | keycode[j])-(ch & keycode[j]);  // a xor b = a or b-a and b
    j++;
    if (j==keycodelength) j=0;
    // putting char to output
    fwrite(&ch,sizeof(char),1,output);
    counter++;
    // getting char from input
    fread(&ch,sizeof(char),1,input);
  } while (!feof(input));
  printf("%ld byte(s) processedn");
}

void main(int argc, char **argv)
{
  // copyleft;)_
  printf("XORCrypt. copyleft {c} 1996 Johna Smith. freewarenn");
  // analysing parameters
  if (argc!=4)
  {
    usage();
    return;
  }
  if (strlen(argv[3])>20)
  {
    // key code is too long
    printf("! ERR01: key code is too longn");
    return;
  }
  strcpy(keycode,argv[3]);
  keycodelength=strlen(keycode);
  if ((input=fopen(argv[1],"rb"))==NULL)
  {
    // error opening file
    printf("! ERR03: can't open source file :(n");
    return;
  };
  if ((output=fopen(argv[2],"wb"))==NULL)
  {
    // error opening file
    fclose(input);
    printf("! ERR04: can't open destination file :(n");
    return;
  };
  encrypt();
  fclose(input);
  fclose(output);
}
Сайт: forum.vingrad.ru






Просмотров: 3685

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную