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


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  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 754 veces)
SnakingMax

Desconectado Desconectado

Mensajes: 167



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

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
import java.io.*;
import java.util.*;
 
public class analizaEntropia
{
  private char alfabeto[]; //array de caracteres que almacena el alfabeto.
  private int repAlfabeto[]; //numero de veces que se repite cada caracter.
  private int tamAlfabeto=255; //tamaño del alfabeto que vamos a usar.
  private int tamTextoCifrado=0; //tamaño en caracteres del archivo.
  private float entropia[]; //array de entropías.
 
  public analizaEntropia()
  {
      //Produce: Un alfabeto con sus respectivas frecuencias.
 
      for (int i=0; i<=tamAlfabeto; i++)
      {
          alfabeto[i]=AsciiDecToChar(i);
      }
 
      for (int i=0; i<=tamAlfabeto; i++)
      {
          repAlfabeto[i]=0;
      }
 
      for (int i=0; i<=tamAlfabeto; i++)
      {
          entropia[i]=0;
      }
  }
 
  public analizaEntropia(int tamAlf)
  {
      //Produce: Un alfabeto con sus respectivas frecuencias.
 
      tamAlfabeto=tamAlf;
 
      for (int i=0; i<=tamAlfabeto; i++)
      {
          alfabeto[i]=AsciiDecToChar(i);
      }
 
      for (int i=0; i<=tamAlfabeto; i++)
      {
          repAlfabeto[i]=0;
      }
 
      for (int i=0; i<=tamAlfabeto; i++)
      {
          entropia[i]=0;
      }
  }
 
  public static char AsciiDecToChar(int leido)
  {
      // Método creado por: Grekz, http://grekz.wordpress.com
      // Produce: el caracter ascii asociado a dicho entero.
      return (char)leido;
  }
 
  public static int contarOcurrencias(String cad, char caracter)
  {
      // Produce: El numero de ocurrencias del caracter en la cadena.
      int i=0;
      int num=cad.indexOf(caracter,0);
 
      while (num!=-1){
          i=i+1;
          num=cad.indexOf(caracter,num);
 
      }
      return i;
  }
 
  public double calculaEntropia(int[] ocurrencias)
  {
      //Asigna a un array la entropía de un texto dadas las ocurrencias y su tamaño.
      //Modifica This
      double entr=0;
      double p=0;
 
      for (int i=0; i==tamAlfabeto; i++)
      {
          p=repAlfabeto[i]/tamTextoCifrado;
          if(p>0)
              entr=entr-p*Math.log(p);
      }
      return entr;
  }
 
  public void analizaFichero(String fichero)
  {
      //Produce: Las frecuencias de un fichero.
      //Modifica: This.
 
      String linea = new String();
      try
      {
          //Definimos el archivo y el buffer para la lectura.
          File archivo = new File (fichero);
          FileReader fr = new FileReader (fichero);
          BufferedReader br = new BufferedReader(fr);
 
          try{
              while ((linea = br.readLine())!=null)
              {
                  for(int i=0; i==linea.length(); i++)
                  {
                          repAlfabeto[i]=(contarOcurrencias(linea,alfabeto[i]));
                  }
              tamTextoCifrado=tamTextoCifrado+linea.length();
              }
          }catch (IOException IOe){
              System.out.println("Error de E/S");
          }
 
      }catch (FileNotFoundException fnfE){
          System.out.println("Archivo no encontrado");
 
      }
  }
}
 


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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Calcular Entropia de un archivo en C++
Criptografía
APOKLIPTICO 3 4,141 Último mensaje 14 Febrero 2009, 19:36
por Sk9ITk5Z
Calcular entropia de un texto en VB
Criptografía
APOKLIPTICO 2 2,970 Último mensaje 7 Febrero 2009, 04:53
por APOKLIPTICO
Entropía.
Criptografía
APOKLIPTICO 5 2,237 Último mensaje 15 Noviembre 2010, 04:18
por APOKLIPTICO
CODIGO DE JAVA - CALCULA LA DIFERENCIA DE FECHAS.....
Java
joseprox 0 2,345 Último mensaje 24 Junio 2010, 19:08
por joseprox
MyPlan : Calcula rápidamente la tarifa más económica según tu consumo
Noticias
wolfbcn 0 529 Último mensaje 30 Mayo 2011, 21:39
por wolfbcn
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines