矢量indice MatLab出错

时间:2017-06-08 22:35:29

标签: matlab vector

我正在尝试创建一个带有一些值的向量,但为了获得向量的指示我使用bitxor函数,问题是MatLab给了我以下错误:

Subscript indices must either be real positive integers or logicals.

功能下方:

for round = 1 : 10
    for i = 1 : 16
        stateU(i)= sboxU(bitxor(stateU(i),keyU(i)));
    end
end

我已经尝试将bitxor的值转换(强制转换)为int,但错误仍然存​​在,有人知道发生了什么事吗?

整个代码下方:

%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
    for round = 1 : 10
        for i = 1 : 16
            stateU(i)= sboxU(bitxor(stateU(i),keyU(i)));
        end
    end

1 个答案:

答案 0 :(得分:0)

在indice中只加1,因为xor函数返回0,就像上面的注释一样。

 for round = 1 : 10
        for i = 1 : 16
            stateU(i)= sboxU(bitxor(stateU(i),keyU(i))+1);
        end
    end