Implementación de Matlab del algoritmo de cifrado y descifrado de datos AES

Tabla de contenido

1. Base teórica

Paso 1: generación de claves

Paso 2: Complete los datos

Paso 3: Cifrado de bloques

Paso 4: salida de texto cifrado

2. Programa básico

3. Conclusión de la simulación


1. Base teórica


       El cifrado y descifrado de datos es un tema importante en el campo de la seguridad de la información. En las redes informáticas y de comunicaciones modernas, a menudo necesitamos transmitir información confidencial, como información de identificación personal, información financiera, etc., a través de redes públicas. Por lo tanto, la tecnología de cifrado y descifrado de datos juega un papel importante en la protección de la seguridad y privacidad de la información. El método de cifrado y descifrado de datos basado en el algoritmo AES incluye principalmente los siguientes pasos:

Paso 1: generación de claves

      En primer lugar, se debe generar una clave. La longitud de la clave puede ser de 128 bits, 192 bits o 256 bits, y se puede seleccionar la longitud de clave adecuada según las necesidades. La generación de la clave puede utilizar un generador de números aleatorios para garantizar la seguridad de la clave.

Paso 2: Complete los datos

       A continuación, se deben completar los datos que se van a cifrar. Dado que el algoritmo AES es un algoritmo de cifrado de bloques, la longitud de los datos de entrada debe ser un múltiplo de 16. Si la longitud de los datos de entrada no es un múltiplo de 16, se requiere relleno. Se pueden utilizar métodos de relleno estándar, como los métodos de relleno PKCS#7.

Paso 3: Cifrado de bloques

       Una vez que se completan los datos, los datos deben agruparse y cada grupo debe cifrarse. El algoritmo AES utiliza el modo de cifrado de bloques y puede optar por utilizar ECB, CBC, CFB u OFB y otros modos. Se puede seleccionar un modo de cifrado de bloque apropiado según las necesidades, y cada bloque se cifra.

Paso 4: salida de texto cifrado

      Finalmente, envíe los datos cifrados como texto cifrado. Los textos cifrados de cada bloque se pueden concatenar para formar el texto cifrado final. Si es necesario transmitir el texto cifrado, es necesario transmitir el texto cifrado. A continuación se proporcionan algunas fórmulas matemáticas relevantes para ayudar a comprender mejor el método de cifrado y descifrado de datos basado en el algoritmo AES.

Extensión clave:

$$
w_i =
\begin{cases}
\operatorname{Word}(i) & \text{if } i \in [0,N-1]\
\operatorname{SubWord}(\operatorname{RotWord}(w_{i- 1}) \oplus w_{iN}) \oplus r_i & \text{if} i \in [N, Nb(Nr+1)-1] \end{casos
}
$$

Entre ellos, $w_i$ es la $i$ésima palabra en la expansión clave, $\operatorname{Palabra}(i)$ es la $i$ésima palabra en la clave, $N$ es el número de palabras en la clave , $Nb $ es el número de palabras en cada grupo, $Nr$ es el número de rondas de cifrado, $\operatorname{RotWord}$ es la operación de desplazamiento circular, $\operatorname{SubWord}$ es la operación de sustitución de bytes, $ r_i$ es la constante redonda.

Sustitución de bytes:

$$
\operatorname{SubPalabra}(w) = [sbox(w_0), sbox(w_1), sbox(w_2), sbox(w_3)]
$$

Entre ellos, $w$ es una palabra y $sbox$ es una tabla de sustitución de bytes.

Cambio cíclico:

$$
\operatorname{RotWord}([a,b,c,d]) = [b,c,d,a]
$$

Entre ellos, $[a,b,c,d]$ es una palabra.

clave más:

$$
\operatorname{AddRoundKey}(s,k) = s \oplus k
$$

Entre ellos, $s$ es la matriz de estado y $k$ es la clave de ronda.

Sustitución de bytes:

$$
\operatorname{SubBytes}(s) = [sbox(s_{i,j})]
$$

Entre ellos, $s_{i,j}$ es un byte en la matriz de estado y $sbox$ es la tabla de sustitución de bytes.

cambio de fila:

$$
\operatorname{ShiftRows}(s) =
\begin{bmatrix}
s_{0,0} & s_{0,1} & s_{0,2} & s_{0,3} \
s_{1,1} & s_{1,2} & s_{1,3} & s_{1,0} \
s_{2,2} & s_{2,3} & s_{2,0} & s_{2,1} \
s_{3,3} & s_{3,0} & s_{3,1} & s_{3,2}
\end{bmatriz}
$$

Entre ellos, $s$ es la matriz de estado.

Confusión de columna:

$$
\operatorname{MixColumns}(s) =
\begin{bmatrix}
\operatorname{MixColumn}(s_{0,0}, s_{1,0}, s_{2,0}, s_{3,0}) \
\operatorname{MixColumn}(s_{0,1}, s_{1,1}, s_{2,1}, s_{3,1}) \
\operatorname{MixColumn}(s_{0,2}, s_ {1,2}, s_{2,2}, s_{3,2}) \
\nombre de operador{MixColumn}(s_{0,3}, s_{1,3}, s_{2,3}, s_{ 3,3})
\end{bmatriz}
$$

Entre ellos, $\operatorname{MixColumn}$ es la operación de mezcla de columnas.

Sustitución inversa de bytes:

$$
\operatorname{InvSubBytes}(s) = [\operatorname{inv_sbox}(s_{i,j})]
$$

Entre ellos, $s_{i,j}$ es un byte en la matriz de estado y $\operatorname{inv_sbox}$ es la tabla de sustitución de bytes inversa.

Cambio retrógrado:

$$
\operatorname{InvShiftRows}(s) =
\begin{bmatrix}
s_{0,0} & s_{0,1} & s_{0,2} & s_{0,3} \
s_{1,3} & s_{1,0} & s_{1,1} & s_{1,2} \
s_{2,2} & s_{2,3} & s_{2,0} & s_{2,1} \
s_{3,1} & s_{3,2} & s_{3,3} & s_{3,0}
\end{bmatriz}
$$

Entre ellos, $s$ es la matriz de estado.

Confusión inversa:

$$
\operatorname{InvMixColumns}(s) =
\begin{bmatrix}
\operatorname{InvMixColumn}(s_{0,0}, s_{1,0}, s_{2,0}, s_{3,0}) \
\operatorname{InvMixColumn}(s_{0,1}, s_{1,1}, s_{2,1}, s_{3,1}) \ \
operatorname{InvMixColumn}(s_{0,2}, s_ {1,2}, s_{2,2}, s_{3,2}) \
\operatorname{InvMixColumn}(s_{0,3}, s_{1,3}, s_{2,3}, s_{ 3,3})
\end{bmatriz}
$$

Entre ellos, $\operatorname{InvMixColumn}$ es la operación de confusión de columna inversa.

Algoritmo de cifrado:

$$
\operatorname{AES}(s, k) = \operatorname{AddRoundKey}(\operatorname{SubBytes}(\operatorname{ShiftRows}(\operatorname{MixColumns}(s))), k)
$$

Entre ellos, $s$ es la matriz de estado y $k$ es la clave de ronda.

Algoritmo de descifrado:

$$
\operatorname{AES}^{-1}(s, k) = \operatorname{AddRoundKey}(\operatorname{InvMixColumns}(\operatorname{InvShiftRows}(\operatorname{InvSubBytes}(s))), k)
$ ps

Entre ellos, $s$ es la matriz de estado y $k$ es la clave de ronda.

2. Programa básico

function state_out = mix_columns (state_in, poly_mat)
mod_pol = bin2dec ('100011011');

% Loop over all columns of the state matrix
for i_col_state = 1 : 4
        
    % Loop over all rows of the state matrix
    for i_row_state = 1 : 4

        % Initialize the scalar product accumulator
        temp_state = 0;
        
        % For the (innner) matrix vector product we want to do
        % a scalar product 
        % of the current row vector of poly_mat
        % and the current column vector of the state matrix.
        % Therefore we need a counter over 
        % all elements of the current row vector of poly_mat and
        % all elements of the current column vector of the state matrix
        for i_inner = 1 : 4
        
            % Multiply (GF(2^8) polynomial multiplication)
            % the current element of the current row vector of poly_mat with
            % the current element of the current column vector of the state matrix
            temp_prod = poly_mult (...
                        poly_mat(i_row_state, i_inner), ...
                        state_in(i_inner, i_col_state), ...
                        mod_pol);
            
            % Add (XOR) the recently calculated product
            % to the scalar product accumulator
            temp_state = bitxor (temp_state, temp_prod);
                        
        end
        
        % Declare (save and return) the final scalar product accumulator
        % as the current state matrix element
        state_out(i_row_state, i_col_state) = temp_state;
        
    end
    
end
up2160

3. Conclusión de la simulación

 

 
    S_Box: 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 311 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 ser 39 4a 4c 58 cf 
            d0ef 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 corriente continua 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 
 
inv_s_box : 52 09 6a d5 30 36 a5 38 bf 40 a3 9 e 8 1 f3 d7 fb 
            7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb 
            54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e 08 2e a1 66 28 d9 24 
            b2 76 5b a2 49 6d 8b d1 25 72 
            f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 92 
            6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 84 
            90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 06 
            d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b 3a 
            91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 7 3 9 
            6 ac 74 22 e7 anuncio 35 85 e2 f9 37 e8 1c 75 df 6e 
            47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 ser 1b 
            fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4 1 f 
            dd un 8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5f 
            60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef 
            a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61 
            17 2b 04 7 eba 77 d6 26 e1 69 14 63 55 21 0c 7d 
 
 
************************************ *** ****
***
* CREACION RCON *
* *
********************************************
 
rcon : 01 00 00 00 
       02 00 00 00 
       04 00 00 00 
       08 00 00 00 
       10 00 00 00 
       20 00 00 00 
       40 00 00 00 
       80 00 00 00 
       1b 00 00 00 
       36 00 00 00 
 
 
******** ***********************************
* *
* EXPANSIÓN DE CLAVE *
* *
****** *************************************
 
w(1:4, :) : 00 01 02 03 
                  04 05 06 07 08 
                  09 0a 0b 0c 
                  0d 0e 0f 
 
Después de rot_word : 0d 0e 0f 0c 
 
Después de sub_bytes : d7 ab 76 fe 
 
rcon(05, :) : 01 00 00 00 
 
Después de rcon xor : d6 ab 76 
 
pocos(05, : ) : d6 aa 74 fd 
 
w(06, :) : d2 af 72 fa 
 
w(07, :) : da a6 78 f1 
 
w(08, :) : d6 ab 76 fe 
 
Después de rot_word : ab 76 fe d6 
 
Después de sub_bytes : 62 38 bb f6 
 
rcon(09, :) : 02 00 00 00 
 
Después de rcon xor : 60 38 bb f6 
 
w(09, :) : b6 92 cf 0b 
 
w(10, :) : 64 3d bd f1 
 
w(11, :) : ser 9b c5 00 
 
w(12, :) : 68 30 b3 fe 
 
Después de rot_word: 30 b3 fe 68 
 
Después de sub_bytes: 04 6d bb 45 
 
rcon(13, :): 04 00 00 00 
 
Después de rcon xor: 00 6d bb 45 
 
w(13, :): b6 ff 74 4e 
 
w(14, :) : d2 c2 c9 bf 
 
w(15, :) : 6c 59 0c bf 
 
w(16, :) : 04 69 bf 41 
 
Después de rot_word : 69 bf 41 04 
 
Después de sub_bytes : f9 08 83 f2 
 
rcon(17, :) : 08 00 00 00 
 
Después de rcon xor : f1 08 83 f2 
 
w(17, :) : 47 f7 f7 bc 
 
w(18, :) : 95 35 3e 03 
 
w(19, :) : f9 6c 32 bc 
 
w(20, :) : fd 05 8d fd 
 
Después de rot_word : 05 8d fd fd 
 
Después de sub_bytes : 6b 5d 54 54 
 
rcon(21, :) : 10 00 00 00 
 
Después de rcon xor : 7b 5d 54 54 
 
w(21, :) : 3c aa a3 e8 
 
w(22, ​​:) : a9 9f 9d eb 
 
w(23, :) : 50 f3 af 57 
 
w(24, :) : ad f6 22 aa 
 
Después de rot_word : f6 22 aa ad 
 
Después de sub_bytes : 42 93 ac 95 
 
rcon(25, :) : 20 00 00 00 
 
Después de rcon xor : 62 93 ac 95 
 
w(25, :) : 5e 39 0f 7d 
 
w(26, :) : f7 a6 92 96 
 
w(27, :) : a7 55 3d c1 
 
w(28, :) : 0a a3 1f 6b 
 
Después de rot_word : a3 1f 6b 0a 
 
Después de sub_bytes : 0a c0 7f 67 
 
rcon(29, :) : 40 00 00 00 
 
Después de rcon xor : 4a c0 7f 67 
 
w(29, :) : 14 f9 70 1a 
 
w(30, :) : e3 5f e2 8c 
 
w(31, :) : 44 0a df 4d 
 
w(32, :) : 4e a9 c0 26 
 
Después de rot_word : a9 c0 26 4e 
 
Después de sub_bytes : d3 ba f7 2f 
 
rcon(33, :) : 80 00 00 00 
 
Después de rcon xor : 53 ellos f7 2f 
 
w(33, :) : 47 43 87 35 
 
w(34, :) : a4 1c 65 b9 
 
w(35, :) : e0 16 ellos f4 
 
w(36, :) : ae bf 7a d2 
 
Después rot_word : bf 7a d2 ae 
 
Después de sub_bytes : 08 por b5 e4 
 
rcon(37, :) : 1b 00 00 00 
 
Después de rcon xor : 13 por b5 e4 
 
w(37, :) : 54 99 32 d1 
 
w(38, :) : f0 85 57 68 
 
w(39, :) : 10 93 ed 9c 
 
w(40, :) : be 2c 97 4e 
 
Después de rot_word : 2c 97 4e be 
 
Después de sub_bytes : 71 88 2f ae 
 
rcon(41, :) : 36 00 00 00 
 
Después de rcon xor : 47 88 2f ae 
 
w(41, :) : 13 11 1d 7f 
 
w(42, :) : e3 94 4a 17 
 
w( 43, :) : f3 07 a7 8b 
 
w(44, :) : 4d 2b 30 c5 
 
 
****************************** **************
* *
* CREACIÓN DE ALFOMBRA DE POLIÉSTER *
* *
************************** ******************
 
    poliéster_mat: 02 03 01 01 
               01 02 03 01 
               01 01 02 03 
               03 01 01 02 
 
inv_poly_mat: 0e 0b 0d 09 09 
               0e 0b 0d 
               0d 09 0e 0b 
               0b 0d 09 0e 
 
 
****************************************** **
* *
* CIFRO *
* *
***************************************** ***
 
Estado inicial: 00 44 88 cc 
                                 11 55 99 dd 
                                 22 66 aa ee 
                                 33 77 bb ff 
 
Clave de ronda inicial: 00 04 08 0c 
                                 01 05 09 0d 
                                 02 06 0a 0e 03 
                                 07 0b 0f 
 
Estado al inicio de la ronda 1: 00 40 80 c0 
                                 10 50 90 d0 
                                 20 60 a0 e0 
                                 30 70 b0 f0 
 
Después de sub_bytes: 63 09 cd ba 
                                 ca 53 60 70 
                                 b7 d0 e0 e1 
                                 04 51 e7 8c 
 
Después de shift_rows: 63 09 cd ba 
                                 53 60 70 ca 
                                 e0 e1 b7 d0 
                                 8c 04 51 e7 
 
Después de mix_columns: 5f 57 f7 1d 
                                 72 f5 be b9 
                                 64 bc 3b f9 
                                 15 92 29 1a 
 
Clave de ronda: d6 d2 da d6 
                                 aa af a6 ab 
                                 74 72 78 76 
                                 fd fa f1 fe 
 
Estado al comienzo de la ronda 2: 89 85 2d cb 
                                 d8 5a 18 12 
                                 10 ce 43 8f 
                                 e8 68 d8 e4 
 
Después de sub_bytes: a7 97 d8 1f 
                                 61 be ad c9 
                                 ca 8b 1a 73 
                                 9b 45 61 69 
 
Después de shift_rows: a7 97 d8 1f 
                                 be ad c9 61 
                                 1a 73 ca 8b 
                                 69 9b 45 61 
 
Después de mix_columns: ff 31 64 77 
                                 87 d8 51 3a 
                                 96 6a 51 d0 
                                 84 51 fa 09 
 
Tecla redonda: b6 64 be 68 
                                 92 3d 9 b 30 
                                 cf bd c5 b3 
                                 0b f1 00 fe 
 
Estado al comienzo de la ronda 3: 49 55 da 1f 
                                 15 e5 ca 0a 
                                 59 d7 94 63 
                                 8f a0 fa f7 
 
Después de sub_bytes: 3b fc 57 c0 
                                 59 d9 74 67                                   cb 
                                 0e 22 fb  73 e0 2d
                                 68 
 
Después de shift_rows: 3b fc 57 c0  d9 74 67                                  59 22 fb cb 0e                                   68 73 e0 2d  Después de mezclar _columnas: 4c f7 2c 53                                   9c 71 3f 4d                                   1e f0 86 f2                                   66 76 8e 56 



 




 
Tecla redonda: b6 d2 6c 04 
                                 ff c2 59 69 
                                 74 c9 0c bf 
                                 4e bf bf 41 
 
Estado al inicio de la ronda 4: fa 25 40 57 
                                 63 b3 66 24 
                                 6a 39 8a 4d 
                                 28 c9 31 17 
 
Después de sub_bytes: 2d 3f 09 5b 
                                 fb 6d 33 36 
                                 02 12 7e e3 
                                 34 dd c7 f0 
 
Después de shift_rows: 2d 3f 09 5b 
                                 6d 33 36 fb 
                                 7e e3 02 12 
                                 f0 34 dd c7 
 
Después de mix_columns: 63 fc 97 75 
                                 85 53 be 47 
                                 b7 8d 47 d6 
                                 9f f9 8e 91 
 
Tecla redonda: 47 95 f9 fd 
                                 f7 35 6c 05 
                                 f7 3e 32 8d 
                                 bc 03 bc fd 
 
Estado al inicio de ronda 5: 24 69 6e 88 
                                 72 66 d2 42 
                                 40 b3 75 5b 
                                 23 fa 32 6c 
 
Después de sub_bytes: 36 f9 9f c4 
                                 40 33 b5 2c 
                                 09 
                                 6d 9d 39 26 2d 23 50 
 
Después de shift_rows: 36 f9 9f c4 
                                 33 b5 2c 40 
                                 9d 39 09 6d 
                                 50 26 2d 23 
 
Después de mix_columns: f4 32 75 1d 
                                 ac e5 f1 d0 
                                 d4 54 d6 3b 
                                 54 d0 c5 3c 
 
Tecla redonda: 3c a9 50 ad 
                                 aa 9f f3 f6 
                                 a3 9d de 22 
                                 e8 eb 57 aa 
 
Estado al comienzo de la ronda 6: c8 9b 25 b0 
                                 16 7a 02 26 
                                 77 c9 79 19  bc
                                 3b 92 96 
 
Después de sub_bytes: e8 14 3f e7 
                                 47 da 77 f7 
                                 f5 dd b6 d4 
                                 65 e2 4f 90 
 
Después de shift_rows: e8 14 3f e7 
                                 da 77 f7 47 
                                 b6 d4 f5 dd 
                                 90 65 e2 4f 
 
Después de mix_columns: 98 00 6b 8e 
                                 16 f8 2c 5a 
                                 ee 7f 04 d0 
                                 74 55 9c 36 
 
Tecla de ronda: 5e f7 a7 0a 
                                 39 a6 55 a3 
                                 0f 92 3d 1f 
                                 7d 96 c1 6b 
 
Estado al inicio de la ronda 7: c6 f7 cc 84 
                                 2 f 5e 79 f9 
                                 e1 ed 39 cf 
                                 09 c3 5d 5d 
 
Después de sub_bytes: b4 68 4b 5f 
                                 15 58 b6 99 
                                 f8 55 12 8a 
                                 01 2e 4c 4c 
 
Después de shift_rows: b4 68 4b 5f 
                                 58 b6 99 15 
                                 12 8a f8 55 
                                 4c 01 2e 4c 
 
Después de mix_columns: c5 9a f0 98 
                                 7e 9b 5f c6 
                                 1c d2 4b 34 
                                 15 8 6 e0 39 
 
Clave redonda : 14 e3 44 4e 
                                 f9 5f 0a a9 
                                 70 e2 df c0 
                                 1a 8c 4d 26 
 
Estado al inicio de la ronda 8: d1 79 b4 d6 
                                 87 c4 55 6f 
                                 6c 30 94 f4 
                                 0f 0a ad 1f 
 
Después de sub_bytes: 3e b6 8d f6 
                                 17 1c fc a8 
                                 50 04 22 bf 
                                 76 67 95 c0 
 
Después de shift_rows: 3e b6 8d f6 
                                 1c fc a8 17 
                                 22 bf 50 04 
                                 c0 76 67 95 
 
Después de mix_columns: ba a1 d5 5f 
                                 a0 f9 51 41 
                                 3d b5 2c 4d 
                                 e7 6e ba 23 
 
Tecla de ronda: 47 a4 e0 ae 
                                 43 1c 16 ​​bf 
                                 87 65 ba 7a 
                                 35 b9 f4 d2 
 
Estado al comienzo de la ronda 9: fd 05 35 f1 
                                 e3 e5 47 fe 
                                 ba d0 96 37 
                                 d2 d7 4e f1 
 
Después de sub_bytes: 54 6b 96 a1 
                                 11 d9 a0 bb 
                                 f4 70 90 9a 
                                 b5 0e 2f a1 
 
Después de shift_rows: 54 6b 96 a1 
                                 d9 a0 bb 11 
                                 90 9a f4 70 
                                 a1 b5 0e 2f 
 
Después de mix_columns: e9 02 1b 35 
                                 f7 30 f2 3c 
                                 4e 20 cc 21 
                                 ec f6 f2 c7 
 
Tecla redonda: 54 f0 10 be 
                                 99 85 93 2 
                                 32 57 ed 97 
                                 d1 68 9c 4e 
 
Estado al comienzo de la ronda final: bd f2 0b 8b 
                                 6e b5 61 10 
                                 7c 77 21 b6 
                                 3d 9e 6e 89 
 
Después de sub_bytes: 7a 89 2b 3d 
                                 9f d5 ef ca 
                                 10 f5 fd  4e
                                 27 0b 9f a7 
 
Después de shift_rows: 7a 89 2b 3d 
                                 d5 ef ca 9f 
                                 fd 4e 10 f5 
                                 a7 27 0b 9f 
 
Ronda clave : 1 3 e3 f3 4d 
                                 11 94 07 2b 
                                 1d 4a a7 30 
                                 7f 17 8b c5 
 
Estado final: 69 6a d8 70 
                                 c4 7b cd b4 
                                 e0 04 b7 c5 
                                 d8 30 80 5a 
 
 
******************************* *** **************
* *
* CIFRADO INVERSO *
* *
************************* ***** ***************
 
Estado inicial: 69 6a d8 70 
                                 c4 7b cd b4 
                                 e0 04 b7 c5 
                                 d8 30 80 5a 
 
Tecla de ronda inicial: 13 e3 f3 4d 
                                 11 94 07 2b 
                                 1d 4a a7 30 
                                 7f 17 8b c5 
 
Estado al inicio de la ronda 9 : 7a 89 2b 3d 
                                 d5 ef ca 9f 
                                 fd 4e 10 f5 
                                 a7 27 0b 9f 
 
Después de inv_shift_rows : 7a 89 2b 3d 
                                 9f d5 ef ca 
                                 10 f5 f d 4e 
                                 27 0b 9f a7 
 
Después de inv_sub_bytes: bd f2 0b 8b 
                                 6e b5 61 10 
                                 7c 77 21 b6 
                                 3d 9e 6e 89 
 
Ronda clave: 54 f0 10 be 
                                 99 85 93 2c 
                                 32 57 ed 97 
                                 d1 68 9c 4e 
 
Después de agregar_ronda_clave: e9 02 1b 35 
                                 f7 30 f2 3c 
                                 4e 20 cc 21 
                                 ec f6 f2 c7 
 
Estado al inicio de la ronda 8: 54 6b 96 a1 
                                 d9 a0 bb 11 
                                 90 9a f4 70 
                                 a1 b5 0e 2f 
 
Después de inv_shift_rows : 54 6b 96 a1 
                                 11 d9 a0 bb 
                                 f4 70 90 9a 
                                 b5 0e 2f a1 
 
Después de inv_sub_bytes: fd 05 35 f1 
                                 e3 e5 47 fe 
                                 ba d0 96 37 
                                 d2 d7 4e f1 
 
Tecla redonda: 47 a4 e0 ae 
                                 43 1c 16 ​​bf 
                                 87 65 ba 7a 
                                 35 b9 f 4 d2 
 
Después de add_round_key: ba a1 d5 5f 
                                 a0 f9 51 41 
                                 3d b5 2c 4d 
                                 e7 6e ba 23 
 
Estado al comienzo de la ronda 7: 3e b6 8d f6 
                                 1c fc a8 17 
                                 22 bf 50  04
                                 c0 76  67 95
 
Después de inv_shift_rows: 3e b6 8d f6 
                                 17 1c fc a8 
                                 50 04 22 bf 
                                 76 67 95 c0 
 
Después de inv_sub_bytes : d1 79 b4 d6 
                                 87 c4 55 6f 
                                 6c 30 94 f4 
                                 0f 0a ad 1f 
 
Tecla redonda: 14 e3 44 4e 
                                 f9 5f 0a a9 
                                 70 e2 df c0 
                                 1a 8c 4d 26 
 
Después de add_round_key: c5 9a f0 98 
                                 7e 9b 5f c6 
                                 1c d2 4b 34 
                                 15 86 e0 39 
 
Estado al comienzo de la ronda 6: b4 68 4b 5f 
                                 58 b6 99 15 
                                 12 8a f 8 55 
                                 4c 01 2e 4c 
 
Después de inv_shift_rows: b4 68 4b 5f 
                                 15 58 b6 99 
                                 f8 55 12 8a 
                                 01 2e 4c 4c 
 
Después de inv_sub_bytes: c6 f7 cc 84 
                                 2f 5e 79 f9 
                                 e1 ed 39 cf 
                                 09 c3 5d 5d 
 
Tecla redonda: 5e f7 a7 0a 
                                 39 a6 55 a3 
                                 0f 92 3d 1f 
                                 7d 96 c1 6b 
 
Después de add_round_key: 98 0 0 6b 8e 
                                 16 f8 2c 5a 
                                 ee 7f 04 d0 
                                 74 55 9c 36 
 
Estado al comienzo de la ronda 5: e8 14 3f e7 
                                 da 77 f7 47 
                                 b6 d4 f5 dd 
                                 90 65 e2 4f 
 
Después de inv_shift_rows: e8 14 3f e7 
                                 47 da 77 f7 
                                 f5 dd b6 d4 
                                 65 e2 4f 90 
 
Después de inv_sub_bytes: c8 9b 25 b0 
                                 16 7a 02 26 
                                 77 c9 79 19  antes
                                 de cristo 3b 92 96 
 
Tecla redonda: 3c a9 50 ad 
                                 aa 9f f3 f6 
                                 a3 9d af 22 
                                 e8 eb 57 aa 
 
Después de add_round_key: f4 32 75 1d 
                                 bc e5 f1 d0 
                                 d4 54 d6 3b 
                                 54 d0 c5 3c 
 
Estado al inicio de la ronda 4: 36 f9 9f c4 
                                 33 b5 2c 40 
                                 9d 39 09 6d 50 
                                 26 2d 23 
 
Después de inv_shift_rows : 36 f9 9f c4 
                                 40 33 b5 2c 
                                 09 6d 9d 39 
                                 26 2d 23 50 
 
Después de inv_sub_bytes: 24 69 6e 88 
                                 72 66 d2 42 
                                 40 b3 75 5b 
                                 23 fa 32 6c 
 
Clave redonda: 47 95 f9 fd 
                                 f7 35 6c 05 
                                 f7 3e 32 8d 
                                 bc 03 bc fd 
 
Después de agregar_clave_redonda: 63 fc 97 75 
                                 85 53 be 47 
                                 b7 8d 47 d6 
                                 9f f 9 8e 91 
 
Estado al comienzo de la ronda 3: 2d 3f 09 5b 
                                 6d 33 36 fb 
                                 7e e3 02 12 
                                 f0 34 dd c7 
 
Después de inv_shift_rows: 2d 3f 09 5b 
                                 fb 6d 33  36 02
                                 12 7e e3 
                                 34 dd c7 f0 
 
Después de inv_sub_bytes: fa 25 40 57 
                                 63 b3 66 24 
                                 6a 39 8a 4d 
                                 28 c9 31 17 
 
Tecla redonda: b6 d2 6c 04 y 
                                 sig. c2 59 69 
                                 74 c9 0c bf 
                                 4e bf bf 41 
 
Después de add_round_key : 4c f7 2c 53 
                                 9c 71 3f 4d 
                                 1e f0 86 f2 
                                 66 76 8e 56 
 
Estado al comienzo de la ronda 2: 3b fc 57 c0 
                                 d9 74 67 59 
                                 22 fb cb 0e 
                                 68 73 e0 2d 
 
Después de inv_shift_rows: 3b fc 57 c0 
                                 59 d9 74 67 
                                 cb 0 e 22 fb 
                                 73 e0 2d 68 
 
Después de inv_sub_bytes: 49 55 da 1f 
                                 15 e5 ca 0a 
                                 59 d7 94 63 
                                 8f a0 fa f7 
 
Tecla redonda: b6 64 be 68 
                                 92 3d 9b 30 
                                 cf bd c5 b3 
                                 0b f1 00 fe 
 
Después de add_round_key: ff 31 64 77 
                                 87 d8 51 3a 
                                 96 6a 51 d0 
                                 84 51 fa 09 
 
Estado al comienzo de la ronda 1: a7 97 d8 1f 
                                 be ad c9 61 
                                 1a 73 ca 8b 
                                 69 9b 45 61 
 
Después de inv_shift_rows : a7 97 d8 1f 
                                 61 BE AD C9 
                                 CA 8B 1A 73 
                                 9B 45 61 69 
 
Después de inv_sub_bytes: 89 85 2d CB 
                                 D8 5a 18 12 
                                 10 CE 43 8F 
                                 E8  68 D8
 
Clave redonda: D6 D2 DA D6 
                                 AA AF A6 AB 
                                 74 72 78 76 
                                 FD FA F1 FE FE 
 
Después de add_round_key: 5f 57 f7 1d 
                                 72 f5 be b9 
                                 64 bc 3b f9 
                                 15 92 29 1a 
 
Estado al comienzo de la ronda final: 63 09 cd ba 
                                 53 60 70 ca 
                                 e0 e1 b7 d0 
                                 8c 04 51 e7 
 
Después de inv_shift_rows: 63 09 cd ba 
                                 ca 53 60 70 
                                 b7 d0 e0 e1 
                                 04 51 e7 8c 
 
Después de inv_sub_bytes: 0 0 40 80 c0 
                                 10 50 90 d0 
                                 20 60 a0 e0 
                                 30 70 b0 f0 
 
Tecla redonda: 00 04 08 0c 
                                 01 05 09 0d 
                                 02 06 0a 0e 
                                 03 07 0b 0f 
 
Estado final: 00 44 88 cc 
                                 11 55 99 dd 
                                 22 66 aa ee 
                                 33 77 bb ff 
 

respuesta =

     0 17 34 51 68 85 102 119 136 153 170 187 204 221 238 255


texto cifrado =

   105 196 224 216 106 123 4 48 216 205 183 128 112 180 197 90


re_texto sin formato =

     0 17 34 51 68 85 102 119 136 153 170 187 204 221 238 255

>> 

Supongo que te gusta

Origin blog.csdn.net/ccsss22/article/details/131596884
Recomendado
Clasificación