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

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


Шифрование/дешифрование сдвигом

Поиск:
Код

//////////////////////////////////////////////////////////////////////////////
//
//  Encrypting/decrypting file (shift method)
//
//  (c) Johna Smith, 1996
//
//  Method description:
//    1) Set the base for randomizer (this is the main code for decrypting)
//    2) Get random number using the following formula: x=fract(11*x+Pi)
//    3) Crypt character using formula ch'=ch+rnd()*255
//    4) Repeat steps 3 & 4 for all chars in the text
//
//////////////////////////////////////////////////////////////////////////////

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

#define Pi  3.14159265358979323846

void usage(void)
{
  // show how to use this program if there isn't enough parameters
  printf("Usage: crypt.exe filename1 DECRYPT|ENCRYPT filename2 keyn");
  printf("filename1 - name of source filen");
  printf("filename2 - name of destination filen");
  printf("key - key code, must be a numbern");
  printf("nExample: crypt.exe crypt.cpp ENCRYPT crypt.crp 123.45678n");
}

float rnd(float _base=0)  // generates random number
{
  static float base;
  float tmp;

  // reinitializing randomizer if _base!=0
  if (_base!=0) base=_base;

  // generating random number
  tmp=11*base+Pi;
  base=tmp-(int)tmp;

  return base;
}

FILE *input, *output;

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

  fread(&ch,sizeof(char),1,input);
  do
  {
    // encrypting char
    tmp=rnd()*255;
    if (ch+tmp>255) ch+=(tmp-255);
    else ch+=tmp;
    // 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) encryptedn");
}

void decrypt(void)
{
  unsigned char ch;
  int tmp;
  unsigned long int counter=0;

  fread(&ch,sizeof(char),1,input);
  do
  {
    // decrypting char
    tmp=rnd()*255;
    if ((int)ch<tmp) ch-=(tmp-255);
    else ch-=tmp;
    // 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) decryptedn");
}

void main(int argc, char **argv)
{
  // copyleft;)_
  printf("Crypt. copyleft {c} 1996 Johna Smith. freewarenn");
  // analysing parameters
  if (argc!=5)
  {
    usage();
    return;
  }
  rnd(atof(argv[4])); // setting up randomizer base
  if (errno==ERANGE)
  {
    // wrong key code
    printf("! ERR01: key code is out of rangen");
    return;
  }
  if ((input=fopen(argv[1],"rb"))==NULL)
  {
    // error opening file
    printf("! ERR03: can't open source file :(n");
    return;
  };
  if ((output=fopen(argv[3],"wb"))==NULL)
  {
    // error opening file
    fclose(input);
    printf("! ERR04: can't open destination file :(n");
    return;
  };
  if (stricmp(argv[2],"ENCRYPT")==0) encrypt();else
  if (stricmp(argv[2],"DECRYPT")==0) decrypt();else
  {
    // must be ENCRYPT or DECRYPT magic word there to know what to do
    printf("! ERR02: serious bug was found in second parameter :)n");
    fclose(input);
    fclose(output);
    return;
  }
  fclose(input);
  fclose(output);
}
Сайт: forum.vingrad.ru






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

 

 

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


Популярные:
  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. Проверить дубляжи в столбце


 

 

 
 
На главную