函数返回matlab中的矢量

问题描述:

我有一个函数在MatLab中返回一个向量,问题是函数应该返回一个无符号整数值,我已经调试了我的代码,并且我意识到变量galois_value在我做的时候变成了一个向量一个bitand和一个bitxor操作。我试图做一个typecast把矢量变成一个无符号的值,但不起作用。我试图强制演员阵容,但不起作用。下面的功能:函数返回matlab中的矢量

function galois_value = galois_mul2(value) 
    hex = uint8(hex2dec('1B')); 
    temp = typecast(value, 'int8'); 
    temp = bitshift(temp,-7); 
    temp = bitand(typecast(temp,'uint8'),hex); 
    galois_value = bitxor(bitshift(value,1),uint16(temp)); 
end 

此函数的正确的输出应该是(这个输出来自于正在一个C代码):

96 
210 
97 
224 
119 
194 
192 
156 
196 
195 
102 
10 
10 
117 
235 
213 
49 
57 
235 
79 
172 
5 
23 
62 
111 
188 
223 
128 
113 
133 
128 
102 
30 
238 
226 
31 

输出我用MATLAB函数得到:

96  96 

210 210 

353 378 

224 224 

375 364 

194 194 

192 192 

156 156 

196 196 

451 472 

102 102 

10  10 

10  10 

373 366 

491 496 

469 462 

305 298 

313 290 

491 496 

335 340 

172 172 

261 286 

279 268 

62  62 

367 372 

188 188 

479 452 

128 128 

369 362 

389 414 

128 128 

102 102 

30  30 

238 238 

226 226 

287 260 

要显示的代码和调试功能:

%Key 
key = {'00','01','02','03','04','05','06','07','08','09','0a','0b','0c','0d','0e','0f'}; 
for n = 1 : 16 
    keyU(n)=uint16(hex2dec(key(n))); 
end 
%State 
state = {'00','11','22','33','44','55','66','77','88','99','aa','bb','cc','dd','ee','ff'}; 
for n = 1 : 16 
    stateU(n)=uint16(hex2dec(state(n))); 
end 
%Sbox 
sbox = {'63','7c','77','7b','f2','6b','6f','c5','30','01','67','2b','fe','d7','ab','76','ca','82','c9','7d','fa','59','47','f0','ad','d4','a2','af','9c','a4','72','c0','b7','fd','93','26','36','3f','f7','cc','34','a5','e5','f1','71','d8','31','15','04','c7','23','c3','18','96','05','9a','07','12','80','e2','eb','27','b2','75','09','83','2c','1a','1b','6e','5a','a0','52','3b','d6','b3','29','e3','2f','84','53','d1','00','ed','20','fc','b1','5b','6a','cb','be','39','4a','4c','58','cf','d0','ef','aa','fb','43','4d','33','85','45','f9','02','7f','50','3c','9f','a8','51','a3','40','8f','92','9d','38','f5','bc','b6','da','21','10','ff','f3','d2','cd','0c','13','ec','5f','97','44','17','c4','a7','7e','3d','64','5d','19','73','60','81','4f','dc','22','2a','90','88','46','ee','b8','14','de','5e','0b','db','e0','32','3a','0a','49','06','24','5c','c2','d3','ac','62','91','95','e4','79','e7','c8','37','6d','8d','d5','4e','a9','6c','56','f4','ea','65','7a','ae','08','ba','78','25','2e','1c','a6','b4','c6','e8','dd','74','1f','4b','bd','8b','8a','70','3e','b5','66','48','03','f6','0e','61','35','57','b9','86','c1','1d','9e','e1','f8','98','11','69','d9','8e','94','9b','1e','87','e9','ce','55','28','df','8c','a1','89','0d','bf','e6','42','68','41','99','2d','0f','b0','54','bb','16'}; 
for n = 1 : 256 
    sboxU(n)=uint16(hex2dec(sbox(n))); 
end 
%Rcon 
rcon = {'01','02','04','08','10','20','40','80','1b','36'}; 
for n = 1 : 10 
    rconU(n)=uint16(hex2dec(rcon(n))); 
end 
%Main AES Data Loop 
for round = 1 : 10 
%Add key + sbox 
    for i = 1 : 16 
     stateU(i)= sboxU(bitxor(stateU(i),keyU(i))+1); 
    end 
%Shift Rows 
    buf1 = stateU(2); 
    stateU(2) = stateU(6); 
    stateU(6) = stateU(10); 
    stateU(10) = stateU(14); 
    stateU(14) = buf1; 

    buf1 = stateU(3); 
    buf2 = stateU(7); 
    stateU(3) = stateU(11); 
    stateU(7) = stateU(15); 
    stateU(11) = buf1; 
    stateU(15) = buf2; 

    buf1 = stateU(16); 
    stateU(16) = stateU(12); 
    stateU(12) = stateU(8); 
    stateU(8) = stateU(4); 
    stateU(4) = buf1; 
%Process mixcolumn for all rounds but the last one 
    if round < 10 
     for j = 0 : 3 
%Compute the current index 
      buf4 = (bitshift(j,2)); 
      %buf1 
      aux1 = bitxor(stateU(buf4+1),stateU(buf4+2)); 
      aux2 = bitxor(stateU(buf4+3),stateU(buf4+4)); 
      buf1 = bitxor(aux1,aux2); 
      %buf2 
      buf2 = stateU(buf4+1); 
      %buf3 
      buf3 = bitxor(stateU(buf4+1),stateU(buf4+2)); 
      buf3 = galois_mul2(buf3); 
      disp(buf3); 
     end 
    end 

end 

问题出现在第3行的galois_mul2函数中
temp = typecast(value,'int8'); 因为value有类型uint16输出的类型转换是两个元素。例如对于例如 (uint16(5),'int8')的输出是5 0 如果将main的第3,8,13,18行和galois_mul2函数的第3,6行的所有类型更改为uint8,则问题将得到解决。