Чт ноя 11, 2010 07:52:32
procedure AddCheckSumm(var data: array of byte; len: integer);
type trec = record
t0: byte;
t1: byte;
t2: byte;
t3: byte;
end;
var chksum: Longword;
i: integer;
ecx: Longword;
t: trec;
begin
if length(data)<len+4 then exit;
chksum := 0;
i := 0;
while i < len do begin
t.t0 := data[i];
t.t1 := data[i + 1];
t.t2 := data[i + 2];
t.t3 := data[i + 3];
ecx := Longword(t);
chksum := chksum xor ecx;
i := i + 4;
end;
t := trec(chksum);
data[len]:=t.t0;
data[len+1]:=t.t1;
data[len+2]:=t.t2;
data[len+3]:=t.t3;
void AddCheckSumm(int data[], int len) // expl: AddCheckSumm(Data,24);
{
union trec
{
char t[4];
long l;
};
trec t;
unsigned long int chksum;
unsigned long int ecx;
int i=0;
//тело.
if (sizeof(data) < len+4)
{ return; };
chksum = 0;
i = 0;
while (i<len)
{
t.t[0] = data[i];
t.t[1] = data[i +1];
t.t[2] = data[i +2];
t.t[3] = data[i +3];
ecx = t.l;
chksum = chksum ^ ecx;
i = i +4;
}
t.l = chksum;
data[len] = t.t[0];
data[len +1] = t.t[1];
data[len +2] = t.t[2];
data[len +3] = t.t[3];
}
Чт ноя 11, 2010 08:28:01
Чт ноя 11, 2010 09:05:47
Чт ноя 11, 2010 09:08:41
Чт ноя 11, 2010 09:17:59
Чт ноя 11, 2010 09:32:14
Чт ноя 11, 2010 09:52:33
Чт ноя 11, 2010 12:54:48
length(data) = 40, len = 24
data in 7|156|30|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 |0 |0|0|0|0|0|0|0|0|0|0|0|0|0|40|
data out 7|156|30|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|7|156|30|0|0|0|0|0|0|0|0|0|0|0|0|0|40|
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{ unsigned char data[] = {7,156,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40}; //data in привел к беззнаковой длиной 1 байт
int len = 24;
union trec
{
unsigned char t[4];
long l;
};
trec t;
unsigned long int chksum;
unsigned long int ecx;
int i=0;
//тело.
if (sizeof(data) < len+4)
{ cout<<"in.пи%%ец"<<endl; };
chksum = 0;
i = 0;
while (i<len)
{
t.t[0] = data[i];
t.t[1] = data[i +1];
t.t[2] = data[i +2];
t.t[3] = data[i +3];
ecx = t.l;
chksum = chksum ^ ecx;
i = i +4;
}
t.l = chksum;
data[len] = t.t[0];
data[len +1] = t.t[1];
data[len +2] = t.t[2];
data[len +3] = t.t[3];
for(i=0;i<41;i++){
cout << (int)data[i]<<"|";}
return 0;
}
Чт ноя 11, 2010 13:21:09
if (sizeof(data) < len+4)
{ return; };
Чт ноя 11, 2010 13:25:13
цикл надо делать до len-4 и записывать в data[len-5..1]
Чт ноя 11, 2010 13:40:22
Чт ноя 11, 2010 13:47:01
Чт ноя 11, 2010 13:53:30
...
int len_main = 24;
short len_data_main = sizeof(data_main);
Add(data_main, len_main, len_data);
...
if (sizeof(data) < len+4)
{ return; };
if (lenData < len+4)
{ return; };
Чт ноя 11, 2010 14:07:03
Кислый писал(а):наверно не стоит мучить мозг, а заранее определять длинну массива, и передавать его в функцию.. как вам идея ?
char data[]={1}; char *dt = data; // sizeof(data)=1, sizeof(dt)=4 или 8 в зависимости от архитектуры.
Чт ноя 11, 2010 14:29:21
уверены? по-моему, sizeof(data) покажет размер массива в байтах, если при определении массива он был явно задан:lix писал(а):sizeof(data) всегда равно размеру указателя на вашей архитектуре.
Чт ноя 11, 2010 14:35:47
ARV писал(а):уверены? по-моему, sizeof(data) покажет размер массива в байтах, если при определении массива он был явно задан:lix писал(а):sizeof(data) всегда равно размеру указателя на вашей архитектуре.
int data[30];
sizeof(data) == 60;
sizeof отличает массивы от прочих указателей...
Чт ноя 11, 2010 22:35:37
Base10StringToFGInt('65537',e);
Base256StringToFGInt(sD,d); // sD - строка которую следует зашифровать,
Base256StringToFGInt(sM,m); // sM - rsa_key
FGIntMontgomeryModExp(d,e,m,r); // само шифрование, результат в r
FGIntToBase256String(r,sR); // преобразование к string;
mpz_t m, e, d, r;
mpz_init(m);
mpz_init(e);
mpz_init(d);
mpz_init(r);
mpz_inp_str(d, sD, 16);
mpz_inp_str(m, sM, 16);
mpz_inp_str(e, "65537", 10);
mpz_powm(r, d, e, m);
mpz_out_str(sR, 16, r);
/home/nysha/c++/three/main.cpp|33|error: cannot convert ‘char*’ to ‘FILE*’ for argument ‘2’ to ‘size_t __gmpz_inp_str(__mpz_struct*, FILE*, int)’|
Пт ноя 12, 2010 09:45:56
Пт ноя 12, 2010 10:26:30
Пт ноя 12, 2010 10:35:41
gcc -Wall -lgmp fab.c -o fab && ./fab
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gmp.h>
int main()
{
int num=0;
mpz_t f_1;
mpz_t f_2;
mpz_init(f_1);
mpz_init(f_2);
mpz_set_ui(f_1,0);
mpz_set_ui(f_1,111);
printf("%10d: 0\n",++num);
int i;
for( i = 0; i<64; i++){
mpz_add(f_1,f_2,f_1);
mpz_swap(f_1,f_2);
char * res = mpz_get_str(NULL,10,f_2);
printf("%10d: %s\n",++num, res);
free(res); }
mpz_clear(f_1);
mpz_clear(f_2);
return 0;
}