elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  calcula entropía archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: calcula entropía archivo  (Leído 4,768 veces)
SnakingMax

Desconectado Desconectado

Mensajes: 167



Ver Perfil WWW
calcula entropía archivo
« en: 8 Diciembre 2010, 23:27 pm »

Estos días me puse a escribir una clase en java para analizar la entropía de un archivo, todo esto con una escasa (casi nula) idea de estadística. Y nada mas.. aquí está el código.
Si encontrais algun error se agradecen sugerencias y críticas. Sobre todo en el método calculaEntropia, porque al no tener ni idea de estadística puede hacer cualquier cosa.

Código
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. public class analizaEntropia
  5. {
  6.   private char alfabeto[]; //array de caracteres que almacena el alfabeto.
  7.   private int repAlfabeto[]; //numero de veces que se repite cada caracter.
  8.   private int tamAlfabeto=255; //tamaño del alfabeto que vamos a usar.
  9.   private int tamTextoCifrado=0; //tamaño en caracteres del archivo.
  10.   private float entropia[]; //array de entropías.
  11.  
  12.   public analizaEntropia()
  13.   {
  14.       //Produce: Un alfabeto con sus respectivas frecuencias.
  15.  
  16.       for (int i=0; i<=tamAlfabeto; i++)
  17.       {
  18.           alfabeto[i]=AsciiDecToChar(i);
  19.       }
  20.  
  21.       for (int i=0; i<=tamAlfabeto; i++)
  22.       {
  23.           repAlfabeto[i]=0;
  24.       }
  25.  
  26.       for (int i=0; i<=tamAlfabeto; i++)
  27.       {
  28.           entropia[i]=0;
  29.       }
  30.   }
  31.  
  32.   public analizaEntropia(int tamAlf)
  33.   {
  34.       //Produce: Un alfabeto con sus respectivas frecuencias.
  35.  
  36.       tamAlfabeto=tamAlf;
  37.  
  38.       for (int i=0; i<=tamAlfabeto; i++)
  39.       {
  40.           alfabeto[i]=AsciiDecToChar(i);
  41.       }
  42.  
  43.       for (int i=0; i<=tamAlfabeto; i++)
  44.       {
  45.           repAlfabeto[i]=0;
  46.       }
  47.  
  48.       for (int i=0; i<=tamAlfabeto; i++)
  49.       {
  50.           entropia[i]=0;
  51.       }
  52.   }
  53.  
  54.   public static char AsciiDecToChar(int leido)
  55.   {
  56.       // Método creado por: Grekz, http://grekz.wordpress.com
  57.       // Produce: el caracter ascii asociado a dicho entero.
  58.       return (char)leido;
  59.   }
  60.  
  61.   public static int contarOcurrencias(String cad, char caracter)
  62.   {
  63.       // Produce: El numero de ocurrencias del caracter en la cadena.
  64.       int i=0;
  65.       int num=cad.indexOf(caracter,0);
  66.  
  67.       while (num!=-1){
  68.           i=i+1;
  69.           num=cad.indexOf(caracter,num);
  70.  
  71.       }
  72.       return i;
  73.   }
  74.  
  75.   public double calculaEntropia(int[] ocurrencias)
  76.   {
  77.       //Asigna a un array la entropía de un texto dadas las ocurrencias y su tamaño.
  78.       //Modifica This
  79.       double entr=0;
  80.       double p=0;
  81.  
  82.       for (int i=0; i==tamAlfabeto; i++)
  83.       {
  84.           p=repAlfabeto[i]/tamTextoCifrado;
  85.           if(p>0)
  86.               entr=entr-p*Math.log(p);
  87.       }
  88.       return entr;
  89.   }
  90.  
  91.   public void analizaFichero(String fichero)
  92.   {
  93.       //Produce: Las frecuencias de un fichero.
  94.       //Modifica: This.
  95.  
  96.       String linea = new String();
  97.       try
  98.       {
  99.           //Definimos el archivo y el buffer para la lectura.
  100.           File archivo = new File (fichero);
  101.           FileReader fr = new FileReader (fichero);
  102.           BufferedReader br = new BufferedReader(fr);
  103.  
  104.           try{
  105.               while ((linea = br.readLine())!=null)
  106.               {
  107.                   for(int i=0; i==linea.length(); i++)
  108.                   {
  109.                           repAlfabeto[i]=(contarOcurrencias(linea,alfabeto[i]));
  110.                   }
  111.               tamTextoCifrado=tamTextoCifrado+linea.length();
  112.               }
  113.           }catch (IOException IOe){
  114.               System.out.println("Error de E/S");
  115.           }
  116.  
  117.       }catch (FileNotFoundException fnfE){
  118.           System.out.println("Archivo no encontrado");
  119.  
  120.       }
  121.   }
  122. }
  123.  


« Última modificación: 14 Diciembre 2010, 01:06 am por SnakingMax » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Entropía.
Criptografía
APOKLIPTICO 5 6,363 Último mensaje 15 Noviembre 2010, 04:18 am
por APOKLIPTICO
¿Cómo se calcula el área de esta figura? « 1 2 3 »
Foro Libre
Kefren 20 12,759 Último mensaje 12 Junio 2010, 18:51 pm
por Kefren
MyPlan : Calcula rápidamente la tarifa más económica según tu consumo
Noticias
wolfbcn 0 1,619 Último mensaje 30 Mayo 2011, 21:39 pm
por wolfbcn
entropía
Análisis y Diseño de Malware
zhengxi 2 3,218 Último mensaje 2 Noviembre 2014, 23:51 pm
por zhengxi
¿Calcular Entropía?
Dudas Generales
Hamburguers 1 2,523 Último mensaje 28 Abril 2019, 17:13 pm
por srWhiteSkull
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines