2017-06-11 79 views
1

我有一個函數在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 

回答

1

問題出現在第3行的galois_mul2函數中
temp = typecast(value,'int8'); 因爲value有類型uint16輸出的類型轉換是兩個元素。例如對於例如 (uint16(5),'int8')的輸出是5 0 如果將main的第3,8,13,18行和galois_mul2函數的第3,6行的所有類型更改爲uint8,則問題將得到解決。