Salut,
je lutte encore contre cet algorithme de cryptage en C que j'essai de traduire en matlab (j'ai essayé avec le MEX mais j'ai pas bien compris le tutoriel)
voila le code C:
en Matlab j'ai essayé de faire ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void RC5_SETUP(unsigned char *K) /* secret input key K[0...b-1] */ { WORD i, j, k, u=w/8, A, B, L[c]; /* 1-Initialize L */ for (i=b-1,L[c-1]=0; i!=-1; i--) L[i/u] = (L[i/u]<<8)+K[i]; /* 2- initialise S */ for (S[0]=P,i=1; i<t; i++) S[i] = S[i-1]+Q; /* Mix l into S */ for (A=B=i=j=k=0; k<3*t; k++,i=(i+1)%t,j=(j+1)%c) /* 3*t > 3*c */ { A = S[i] = ROTL(S[i]+(A+B),3); B = L[j] = ROTL(L[j]+(A+B),(A+B)); }
je reçoit un résultat bizar c'est que le tableau des sous clés S possède les mêmes valeurs!!! soit S(i)=3.220666875000000e+09
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 function SETUP(K) %Constante Magique Pw= {'b7e15163'}; Qw= {'9e3779b9'}; w=32; %taille du bloc; r=12; %Nombre de rondes; t= 2*(r+1); b=16; L=[]; Key=[]; %copie de K dans L for i=1:i+4:length(Key)-3 K=key(i:i+3); L=[K L]; end %initialise S S=[]; %sous clés; Q = uint32(hex2dec(Qw)); P = uint32(hex2dec(Pw)); S(1)= P; for i=2:t-1 S(i) = (bitor(S(i-1),Q)); a=dec2bin(S(i),16) end
soit a= 10111111111101110111100111111011
je ne sais pas pourquoi
Ce que je savais c'est que bitor et bistshift s'appliquent pour des entiers non signés.
pouvez vous m'aidez à localiser mon erreur??
Partager