The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"setkey()/encrypt()"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"setkey()/encrypt()"  
Сообщение от anonymous (??) on 08-Дек-06, 11:35 
Здравствуйте!
могли бы обьяснить что не так в тестовой программе

#include <stdio.h>
#include <string.h>
#include <crypt.h>

int main(void)
{
   char txt[64];
   char key[64];
   int p = 0, n = 0;

   memset(key, 0, 64);
   memset(txt, 0, 64);


   strcpy(txt, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
   strcpy(key, "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq123qqqqqq");
   printf("txt = %s\n", txt);
   setkey(key);
   encrypt(txt, 1);   /* encode */

   while(p != 64)
      printf("%d   ", txt[p++]);

   printf("\nafter\n");

   encrypt(txt, 0);   /* decode */

   p = 0;

   while(p != 64)
      printf("%d   ", txt[p++]);

   printf("\n");

}

этот тест функций setkey()/encrypt() ,был взят фактически из мана по encrypt и чуть-чуть переделан для того что бы было видно что происходит. подскажите пожалуйста что не так и почему в итоге не получаеться исходный текст?
PS линковать следует с crypt

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "setkey()/encrypt()"  
Сообщение от NuINu (??) on 08-Дек-06, 14:00 
>Здравствуйте!
>PS линковать следует с crypt
ага, спасибо что напомнил.
вообщем выглядеть это должно приблизительно так ;-)))
ну а твои ошибки, я разбирать небуду, мне своих хватает.
#include <stdio.h>
#include <string.h>
#include <crypt.h>

void make_bit_pattern(char* src, char* dest)
{
   int i, j;
   char t_ch;
   for(i = 0; i < 8; i++) {
      t_ch = src[i];
      for(j=7; j >= 0; j--) {
        dest[i*8+j] = t_ch & 0x01;
        t_ch = t_ch>>1;
      }
   }
}

void make_str_from_pattern(char* src, char* dest)
{
   int i, j;
   char t_ch, s_ch;
   for(i = 0; i < 8; i++) {
      t_ch = 0;
      for(j=0; j < 8; j++) {
        t_ch = t_ch<<1;
        s_ch = src[i*8+j] & 0x01;
        t_ch = s_ch | t_ch;
      }
      dest[i] = t_ch;
   }
   dest[8] = '\0';
}


void print_bit_pattern(char* txt)
{
   int p;
   p = 0;
   while(p != 64)
        printf("%d ", txt[p++]);
}

int main(void)
{
   char txt[64];
   char key[64];
   char rkey[64];
   char rtxt[64];
   char dtxt[9];
   char dkey[9];
   int p = 0, n = 0;
  
   memset(key, 0, 64);
   memset(txt, 0, 64);


   strcpy(txt, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
   strcpy(key, "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq123qqqqqq");
   make_bit_pattern(key, rkey);  
   make_bit_pattern(txt, rtxt);  
   printf("txt:\n");
   print_bit_pattern(rtxt);  
   make_str_from_pattern(rtxt,dtxt);
   printf("\ntxt: %s\n", dtxt);
  
   setkey(rkey);
   printf("\nKEY:\n");
   print_bit_pattern(rkey);  
   make_str_from_pattern(rkey,dkey);
   printf("key: %s\n", dkey);
   encrypt(rtxt, 0);   /* encode */
   printf("\nafter encode\n");
//   printf("txt = %s\n", txt);
   print_bit_pattern(rtxt);  
   make_str_from_pattern(rtxt,dtxt);
   printf("txt: %s\n", dtxt);

   encrypt(rtxt, 1);   /* decode */

   printf("\nafter decode\n");
   print_bit_pattern(rtxt);  
   make_str_from_pattern(rtxt,dtxt);
   printf("txt: %s\n", dtxt);
  
//   printf("txt = %s\n", txt);
   printf("\n");

}

ну и естественно всю твою строку я не кодировал, кодируется по 8 байт.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "setkey()/encrypt()"  
Сообщение от anonymous (??) on 08-Дек-06, 17:44 
>>Здравствуйте!
>>PS линковать следует с crypt
>ага, спасибо что напомнил.
> вообщем выглядеть это должно приблизительно так ;-)))
>ну а твои ошибки, я разбирать небуду, мне своих хватает.
>#include <stdio.h>
>#include <string.h>
>#include <crypt.h>
>
>void make_bit_pattern(char* src, char* dest)
>{
>   int i, j;
>   char t_ch;
>   for(i = 0; i < 8; i++) {
>      t_ch = src[i];
>      for(j=7; j >= 0; j--) {
>        dest[i*8+j] = t_ch &
>0x01;
>        t_ch = t_ch>>1;
>      }
>   }
>}
>
>void make_str_from_pattern(char* src, char* dest)
>{
>   int i, j;
>   char t_ch, s_ch;
>   for(i = 0; i < 8; i++) {
>      t_ch = 0;
>      for(j=0; j < 8; j++) {
>
>        t_ch = t_ch<<1;
>        s_ch = src[i*8+j] &
>0x01;
>        t_ch = s_ch |
>t_ch;
>      }
>      dest[i] = t_ch;
>   }
>   dest[8] = '\0';
>}
>
>
>void print_bit_pattern(char* txt)
>{
>   int p;
>   p = 0;
>   while(p != 64)
>        printf("%d ", txt[p++]);
>}
>
>ну и естественно всю твою строку я не кодировал, кодируется по 8
>байт.

угу, спасибо, сам уже кое что сделал, но написать не успел, спасбо :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру