elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
26 Mayo 2012, 09:41  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: APOKLIPTICO)
| | | |-+  Calcular Entropia de un archivo en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Calcular Entropia de un archivo en C++  (Leído 4,139 veces)
APOKLIPTICO
Moderador
***
Desconectado Desconectado

Mensajes: 3.781


Toys in the attic.


Ver Perfil
Calcular Entropia de un archivo en C++
« en: 8 Diciembre 2008, 05:18 »

Holaa, bueno vi el código que hizo b3ck para calcular la entropia de un archivo, y decidí hacer una version para Windows y en C++ un poquito más coqueta, asi que aquí esta:

Código
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;
 
int CheckFile(char szFilename[]);
ifstream inFile;
long Fsize; // Tamaño del archivo
filebuf *pbuf; // Manejo del buffer
unsigned char *pszDump;
 
int main(int argc, char** argv)
{
if(argc < 2)
{
cout << "Must input a File!" << endl;
exit(1);
}
if(!CheckFile(argv[1])){exit(1);}
cout << "*  Calculating Entropy...";
float entropy = 0.0;
long count[255];
float freq[255];
for(long i = 0; i < 255; i++)
{
count[i] = 0;
freq[i] = 0;
}
for(i = 0; i < Fsize; i++){count[pszDump[i]]++;}
for(i = 0; i < 255; i++)
{
freq[i] = static_cast<double>(count[i]) / static_cast<double>(Fsize);
#ifdef DEBUG
int *UP;
cout << "Prob(" << i << ") = " << static_cast<double>(freq[i], 10) << " (" << count[i] << " Times)\n";
#endif
if (freq[i] > 0.0){entropy -= freq[i] * (log(freq[i]) / log(2.0));}
}
cout << "OK!\n*  Entropy = " << entropy << endl;
return 0;
}
 
int CheckFile(char szFilename[])
{
inFile.open(szFilename, ios::in | ios::binary);
cout << "*  Opening file...";
if(inFile.is_open())
{
cout << "OK!\n*  Getting file size...";
pbuf=inFile.rdbuf();
Fsize=pbuf->pubseekoff (0,ios::end,ios::in);
pbuf->pubseekpos (0,ios::in);
if(Fsize<1)
{
cout << "Error.\n  File is empty.";
inFile.close();
return 0;
}
pszDump = new unsigned char[Fsize];
cout << "OK!\n*  Loading file (May take a while)...";
if(pszDump)
{
inFile.read(reinterpret_cast<char*>(pszDump), Fsize);
inFile.close();
cout << "OK!\n";
}
else
{
cout << "Error.\n";
return 0;
}
return 1;
}
else
{
cout << "Error.\n";
return 0;
}
}

Gracias a B3ck por el código original!
Un abrazo
APOKLIPTICO


« Última modificación: 8 Diciembre 2008, 06:20 por APOKLIPTICO » En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Shrick

Desconectado Desconectado

Mensajes: 259


Yo no se nada, sino ¿porque pregunto?


Ver Perfil
Re: Calcular Entropia de un archivo en C++
« Respuesta #1 en: 30 Enero 2009, 16:38 »

Una dudilla, ¿Que es eso de la entropia? y ¿para que sirve?


En línea

Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .
APOKLIPTICO
Moderador
***
Desconectado Desconectado

Mensajes: 3.781


Toys in the attic.


Ver Perfil
Re: Calcular Entropia de un archivo en C++
« Respuesta #2 en: 30 Enero 2009, 16:46 »

Okay voy a tratar de explicartelo en palabras simples, pero si B3ck ve esto seguro que me mata XDDD.
La entropia es una formula que se utiliza para ver que tan uniformemente se repiten los caracteres en un texto.
Por ejemplo:
ABACDBADBACACABDCABDABCDBCACCBBDABBABBDCCCDBACDBAAA.

Tenemos:
A: 15
B: 15
C: 12
D: 9
Total: 51

A: 0.294
B: 0.294
C: 0.235
D: 0.176
Total: 1

Cuando la entropia es maxima, todos los coeficientes son iguales, eso significa que los caracteres se repiten la misma cantidad de veces.

Esto en criptografia se aplica ya que un cifrado cuanto mas entropia genera, mas seguro es, y en algoritmos de compresion se utiliza tambien porque un archivo comprimido tiende a tener entropia maxima.

Un abrazo
APOKLIPTICO
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Sk9ITk5Z


Desconectado Desconectado

Mensajes: 2.203


El esfuerzo hace la diferencia....


Ver Perfil WWW
Re: Calcular Entropia de un archivo en C++
« Respuesta #3 en: 14 Febrero 2009, 19:36 »

Okay voy a tratar de explicartelo en palabras simples, pero si B3ck ve esto seguro que me mata XDDD.
La entropia es una formula que se utiliza para ver que tan uniformemente se repiten los caracteres en un texto.
Por ejemplo:
ABACDBADBACACABDCABDABCDBCACCBBDABBABBDCCCDBACDBAAA.

Tenemos:
A: 15
B: 15
C: 12
D: 9
Total: 51

A: 0.294
B: 0.294
C: 0.235
D: 0.176
Total: 1

Cuando la entropia es maxima, todos los coeficientes son iguales, eso significa que los caracteres se repiten la misma cantidad de veces.

Esto en criptografia se aplica ya que un cifrado cuanto mas entropia genera, mas seguro es, y en algoritmos de compresion se utiliza tambien porque un archivo comprimido tiende a tener entropia maxima.

Un abrazo
APOKLIPTICO
A eso se le llama entropia, yo hice uno cuando estaba en la universidad pero en java... y hasta horita se como se llama  :xD :xD :xD
En línea


Este es un pueblo de corazón extraviado, no quiere conocer mis caminos por eso no entraran en mi descanso.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Calcular entropía multiescala [Python]
Scripting
Yeison.Eng 2 1,937 Último mensaje 17 Noviembre 2010, 00:22
por Gabriela-
Calcular tamaño de un archivo.txt
Programación C/C++
itzg3 5 2,441 Último mensaje 7 Diciembre 2010, 19:21
por winroot
calcula entropía archivo
Java
SnakingMax 0 752 Último mensaje 8 Diciembre 2010, 23:27
por SnakingMax
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines