Puntuación alta para el código fuente AES
#Definir cifrado falso
#Definir tipo BOOL
typedef struct _AES{
int Nb
int Nr
int Nk
Palabra * larga sin firmar
Estado * largo sin firmar
} AES
/*
Datos cifrados
Byte *texto sin formato de entrada
Byte *inSize longitud del texto sin formato
bytes *Fuera del ubicación donde se almacena el texto cifrado
Byte *clave clave
byte *tamaño de clave longitud de clave
*/
Contraseña no válida (
entrada de caracteres* sin firmar,
int inSize,
salida de caracteres* sin firmar,
clave de caracteres* sin firmar,
int keySize);
/*
Descifrar datos
bytes*Ingresar texto cifrado
Int *inSize longitud del texto cifrado
Los bytes *out que almacenan el texto sin formato.
Byte *clave clave
Int *keySize longitud de clave
*/
void InvCipher(
Sin firmar entrada char*,
int inSize,
salida char* sin firmar,
clave char* sin firmar,
int keySize);
/*
Generar estructura AES de parámetros para cifrado
Int inSize tamaño de bloque
byte * clave
Int longitud de clave
Atributo largo sin firmar (tipo nominal)
Devuelve un puntero de estructura AES
*/
AES *InitAES(AES *aes ,
int inSize,
clave char* sin firmar,
int keySize, TYPE TYPE);
/*
Generar estructura AES de parámetros para cifrado
Tamaño de bloque Int inSize
Byte * clave
Longitud de clave Int
Devolver estructura AES puntero
*/
AES *InitAES(
int inSize,
Clave char* sin firmar,
int keySize, BOOL);
/*
Realizar Nr rondas de operaciones durante el cifrado.
Parámetros de tiempo de ejecución AES * aes
*/
Ciclo de contraseña no válido (
AES * AES);
/*
Realice Nr operación de inversión de ronda durante el descifrado.
Parámetros de tiempo de ejecución AES * aes
*/
void InvCipherLoop(
AES * AES);
/*
Publicar estructura y estado de AES y palabras del almacén de claves
*/
void free (
AES * AES); p>
//AES.cpp
#Incluye " stdafx.h "
#Incluye
#Incluye
# Contiene "AES.h"
Subpalabra char* sin firmar (palabra char * sin firmar);
expansión de clave larga * sin firmar (clave char * sin firmar, int Nk, int Nr, int) ;
/*
Datos cifrados
Byte *texto sin formato de entrada
Byte *inTamaño longitud del texto sin formato
Byte * fuera de la ubicación donde se almacena el texto cifrado
Byte *clave clave
Byte * tamaño de clave longitud de clave
* /
contraseña nula (entrada de caracteres sin firmar*, int inSize, salida de caracteres sin firmar*, clave de caracteres sin firmar*, int keySize)
{
AES aes
init AES (& aes, inSize, key, keySize, encrypt
memcpy(aes. status, input, inSize
Bucle de contraseña (&AES);
memcpy(out, aes. State, inSize);
}
/*
Descifrar datos
Bytes *entrada de texto cifrado
Int *inSize longitud del texto cifrado
Bytes *out que almacenan texto sin formato.
Byte *clave clave
Int *keySize longitud de clave
*/
void InvCipher(entrada char* sin firmar, int inSize, char* sin firmar, clave char* sin firmar, int keySize)
{
AES aes
init AES(& aes, inSize, clave, keySize, descifrar
memcpy(aes. status, input, inSize);
inv cipher loop(& amp; AES
memcpy(aes.State, out, inSize);
}
/*
Generar estructura AES de parámetros para cifrado
Int inSize Tamaño de bloque
Bytes * clave
Longitud de clave int
Devolver puntero de estructura AES
*/
AES *InitAES(AES *aes , int inSize, unsigned char *key, int keySize, TYPE type)
{
int Nb = inSize & gt& gt2,
Nk = keySize >.
& gt2,
Nr = Nb & ltNk? NK:n b+ 6;
AES-& gt; Nb = Nb
AES-& gt; Nr
AES-& gt; Palabra = keyExpansion(key, Nb, Nr, Nk);
AES-& gt; estado = nuevo sin firmar largo[n b+ 3];
if (tipo)
AES-& gt; estado += 3;
return aes
}
/*
Generar estructura AES de parámetros para cifrado
Tamaño de bloque Int inSize
byte * clave
Longitud de clave Int
p>Devolver puntero de estructura AES
*/
AES *InitAES(int inSize, clave char* sin firmar, int keySize, tipo largo sin firmar)
{
Devuelve InitAES(nuevo AES(), inSize, clave, keySize, tipo);
}
/*
*/
Bucle de contraseña no válida (AES *aes)
{
Temperatura de carácter sin firmar[4];
Longitud sin firmar * palabra 8 = AES->Palabra,
* Estado = AES->Estado;
int Nb = AES->Nb,
NR = AES->NR;
int r;
for(r = 0;r<nb;++r)
{
estado[r]^= palabra 8[r];
}
for(int ronda = 1; ronda{
palabra 8+= Nb;
/*
Supongamos Nb = 4;
-
| s0 | >-
| s4 | s5 | s6 | s7 |
- s8 |
| es | sd |
-
| >| | |
-
| |
-
* /
| (Estado+Nb, Estado, 12);
/*
nb = 4;
-
| |
-
| s4 | s5 | |
-
|
-
| sd | se |
-
| -
| | s6 | s7 |
-
| */
for(r = 0; r {
/*
temp = {Sbox[s0], Sbox[s5], Sbox[sa] , Sbox[SF]};
*/
temp[0] = Sbox[*((carácter sin firmar*) estado)] ;
>temp[1] = Sbox[*((carácter sin firmar *)(Estado+1)+1)];
temp[2] = Sbox[*((carácter sin firmar *)(Estado +2 )+2)];
temp[3] = Sbox[*((carácter sin firmar *)(Estado+3)+3)];
*(( Carácter sin firmar * )estado)= log _ 02[temp[0]]^ log _ 03[temp[1]]^ temp[2]^ temp[3];
*((unsigned char *)state+ 1)= log _ 02[temp[1]]^ log _ 03[temp[2]]^ temp[3]^ temp[0];
*((unsigned char *)estado+2 )= log _ 02[temp[2]]^ log _ 03[temp[3]]^ temp[0]^ temp[1];
*((unsigned char *)estado+3) = log _ 02[temp[3]]^ log _ 03[temp[0]]^ temp[1]^ temp[2];
* estado ^= palabra 8 [r]; p>
estado++;
}
estado-= Nb;
}
memcpy( Estado+Nb, Estado, 12);
palabra 8+= Nb;
for(r = 0; r {
*((unsigned char *)Estado) = Sbox[ *(unsigned char *)Estado];
*((unsigned char*)estado+1) = Sbox[*((unsigned char*)(estado+ 1)+1)];
*((carácter sin firmar*)Estado+2) = Sbox[*((carácter sin firmar *)(Estado+2)+2)];
*((carácter sin firmar*)Estado+ 3) = Sbox[*((unsigned char *)(Estado+3)+3)];
* estado ^= palabra 8 [r];
estado++; p>
}
}
/*
Ejecutar Nr rondas durante el descifrado Operación inversa.
Parámetros de tiempo de ejecución AES * aes
*/
void InvCipherLoop(AES *aes)
{
Largo sin firmar * Palabra = AES->Palabra,
* Estado = AES->Estado;
int Nb = AES->Nb,
p>
NR = AES->NR;
Temperatura de carácter sin firmar[4];
int r = 0;
palabra+= Nb * Nr;
for(r = 0; r & ltnb; ++r)
{
estado[r] ^=palabra[r] ;
}
Estado-= 3;
for(int round = Nr-1; round & gt0;-round)
{
/*
Supongamos Nb = 4;
-
| /p>
| | |
-
| | s2 | s3 |
-
| s4 | s5 | s7 |
-
| | sb |
-
| sc | sd |
-
*/
memcpy(Estado, Estado+Nb, 12);
/*
nb = 4;
-
| | s7 |
-
| | sa | sb |
-
| p>
-
| s0 | s1 | s2 |
-
| p>-
| s8 | s9 |
-
|
*/
palabra-= Nb;
estado+= n b+ 2;
for(r = n b-1; r & gt= 0;r -)
{
/*
temp = {iSbox[s0],iSbox[sd],iSbox[sa], es caja[ S7]};
*/
temp[0]= es box[*(byte *)State];
temp[1] = iSbox[ *((byte *)(Estado-1)+1)];
temp[2] = iSbox[*((byte*)(Estado-2)+2)];
temp[3] = iSbox[*((byte*)(estado-3)+3)];
*(unsigned long*)temp ^=palabra[ r];
*(carácter sin firmar *)estado = log _ 0e[temp[0]]^ log _ 0b[temp[1]]^ log _ 0d[temp[2]]^ log _ 09[temp[3] ];
*((unsigned char *)state+1)= log _ 0e[temp[1]]^ log _ 0b[temp[2]]^ log _ 0d [temp[3]] ^ iniciar sesión _ 09[temp[0]];
*(
(carácter sin firmar *)estado+2)= log _ 0e[temp[2]]^ log _ 0b[temp[3]]^ log _ 0d[temp[0]]^ log _ 09[temp[1]];
*((unsigned char *)state+3)= log _ 0e[temp[3]]^ log _ 0b[temp[0]]^ log _ 0d[temp[1]]^ log _ 09[temp[2]];
Estado-;
}
Estado-= 2;
}
palabra-= Nb;
memcpy(Estado, Estado+Nb, 12);
estado+= n b+ 2;
for(r = n b-1; r & gt= 0; r -)
{
*(carácter sin firmar *)Estado = iSbox[*(carácter sin firmar *)Estado];
*((Unsigned char*)State+1) = iSbox[*((Unsigned char*)(State-1)+1)];
*((Ninguno símbolo char *)Estado+2) = iSbox[*((carácter sin firmar *)(Estado-2)+2)];
*((carácter sin firmar*)Estado+3) = iSbox [*(( carácter sin firmar *)(Estado-3)+3)];
*Estado^=Palabra[r];
Estado-;
} p>
}
/*
* -
* | k0 | k2 | k3 | k8 | K9 |.....|Nk*4|
* -
*Nr almacén de claves de rueda
*La longitud de cada columna de clave es Nb .
* -
*| k0 | k1 | k2 | k3 |
* -
*| k7 |
* -
*| k8 | k9 | kb |
* -
*| ke | kf |
* -
*/
Expansión de clave larga* sin firmar(byte* clave, int Nb, int Nr, int Nk) p >
{
Unsigned long * w = new unsigned long [Nb *(Nr+1)] // 4 columnas de bytes corresponden a una palabra
memcpy(w , clave, Nk & lt& lt2);
Tipo entero largo sin signo;
for(int c = Nk; c & ltnb *(Nr+ 1);++c) p>
{
//Pon la última línea de la última ronda en temp.
temp = w[c-1];
//Determina si es la primera línea de cada ronda de claves.
if (c % Nk == 0)
{
//8 bits izquierdo
temp =(temp & lt; <8)|(temp>>24);
//Verificar tabla Sbox
Subpalabra ((byte*)&temp);
Temperatura^ = rcon[c/NK];
}
si no(Nk & gt; 6 & amp& amp(c % Nk == 4)) p>
{
Subword ((byte*)&temp);
}
//w[c-Nk] es la primera línea de la ronda final llave.
^Temperatura;
}
Devolver w;
}
Carácter sin firmar * subpalabra ( Carácter sin firmar * palabra)
{
palabra[0]= Sbox[palabra[0]];
palabra[1]= Sbox[palabra[ 1]] ;
palabra[2]= Sbox[palabra[2]];
palabra[3]= Sbox[palabra[3]];
Devolver palabra ;
}
/*
Publicar estructura y estado de AES y palabra del almacén de claves
*/
No válido AES libre(AES *aes)
{
//for(int I = 0; iNbi++)
// { p>
// printf("%d\n ", I);
//Gratis (AES-& gt; estado [I]); gt; palabra[I]);
// }
//printf(" SD ffd ");
} p>