Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2012, 17:08   #1
Namide
Новичок
Джуниор
 
Регистрация: 14.05.2012
Сообщений: 1
По умолчанию Шифрование VMPC

Пишу чат с зашифрованной передачей данных, возникла проблема с шифрованием - использую VMPC, алгоритм работает для массивов чаров, но при если конвертировать AnsiString в char* потом шифровать, потом обратно в AnsiString, пересылать и раскодировать таким же образом, то получается не то, что посылалось. Грешу на конвертирование, но ошибку найти не могу. Помогите пожалуйста. Вот код шифрования и пример приема сообщения.

Код:
#include <vcl.h>
#include <stdint.h>
#include <string.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMForm *MForm;
bool mode_server=false;
bool use_crypt=false;
String Adress;
String Name;
String SendString;
char *buf;
char *key;
char *iv="sjg5456mdgf56oomdfg4";
int len;

//---------------------------------------------------------------------------
__fastcall TMForm::TMForm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

char n = 0;
char P[256];
char s = 0;


void setup (char * key, char * iv)
{
  long m, i;
  char temp;
  s = 0;

  for (i = 0; i != 256; i++)
    {
      P[i] = (char) i;
    }

  for (m = 0; m != 768; m++)
    {
      s = P[(s + P[m & 0xff] + key[m % 64]) & 0xff];
      temp = P[m & 0xff];
      P[m & 0xff] = P[s & 0xff];
      P[s & 0xff] = temp;
    }
  for (m = 0; m < 768; m++)
    {
      s = P[(s + P[m & 0xff] + iv[m % 64]) & 0xff];
      temp = P[m & 0xff];
      P[m & 0xff] = P[s & 0xff];
      P[s & 0xff] = temp;
    }
  n = 0;
}

void vmpc (char * input, char * output, long len)
{
  long i;
  char z, temp;
  for (i = 0; i != len; i++)
    {
      s = P[(s + P[n & 0xff]) & 0xff];
      z = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff];
      temp = P[n & 0xff];
      P[n & 0xff] = P[s & 0xff];
      P[s & 0xff] = temp;
      n = (char) ((n + 1) & 0xff);
      output[i] = (char) (input[i] ^ z);
    }
}

String crypt(String mes)
{
  setup(key, iv);
  buf=mes.c_str();
  vmpc(mes.c_str(),buf,mes.Length());
  SendString=AnsiString(buf);
  return SendString;
}


void __fastcall TMForm::ServerClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  if (!use_crypt)
    Chat->Lines->Add(TimeToStr(Time()) + " (User) " + Socket->ReceiveText());
  else
    Chat->Lines->Add(TimeToStr(Time()) + " (User) " + crypt(Socket->ReceiveText()));
}
Namide вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование sweeach Компоненты Delphi 3 03.08.2010 02:01
Шифрование gusluk Работа с сетью в Delphi 6 12.04.2010 04:33
Алгоритм VMPC Satgoblin Помощь студентам 6 05.07.2009 20:27
шифрование Stanislav Свободное общение 10 04.03.2008 05:09