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:

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)); 
 
     }
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
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
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
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??