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


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 235
161  Programación / Programación General / Ordenar archivo binario de 100GB en: 21 Enero 2021, 05:02 am
Ok, veamos necesito una forma eficiente de ordenar un archivo de de 100 GB, Cada registro del archivo son 36 Bytes en binario.

Usualmente lo hacia con archivos pequeños 10 o 5 GB pero en RAM. Esto con el algoritmo Introsort y es bastante eficiente, pero ahora estoy utilizando el mismo método pero en Disco duro ya que el archivo es muy grande, Lo que estoy haciendo es leer los registros del disco, cargarlos en memoria, compararlos y escribir en disco en caso de que necesiten ser ordenados. Este proceso es muy lento directo en el disco duro.

Podría tratar de dividir el proceso he ir cargando de 10 en 10 GB en RAM u otra cantidad ordenarlos en memoria y seguir con los demás pedazos, sin embargo el problema es ordenar entre pedazos separados.

El proceso de generación de registros es aleatorio y no se en que orden se generaran los registros, quiero hacer este proceso lo mas eficiente y rápido posible, ya que si funciona este archivo tendré que generar un archivo similar de 500 o 1000 GB. No tengo problemas de Espacio en disco.

¿Alguna idea adicional a hacerlo directo desde el disco duro?


Edit:

Ayer miestras publicaba este teme tambien pense en la solucion, pero no queria publicarla hasta implementarla.

Dado que la generación de los registros es aleatoria y es uniforme entre el rango de A a B entonces se me ocurre que una vez generado el archivo de 100 GB, dividir el rango de A a B en subrangos manejables en RAM
por decil algo tengo los siguientes rangos para registros de 32 bytes:

Código:
From 0000000000000000000000000000000000000000000000000000000000000000 to 0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
From 0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc to 1999999999999999999999999999999999999999999999999999999999999998
From 1999999999999999999999999999999999999999999999999999999999999998 to 2666666666666666666666666666666666666666666666666666666666666664
From 2666666666666666666666666666666666666666666666666666666666666664 to 3333333333333333333333333333333333333333333333333333333333333330
From 3333333333333333333333333333333333333333333333333333333333333330 to 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
From 3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc to 4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc8
From 4cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc8 to 5999999999999999999999999999999999999999999999999999999999999994
From 5999999999999999999999999999999999999999999999999999999999999994 to 6666666666666666666666666666666666666666666666666666666666666660
From 6666666666666666666666666666666666666666666666666666666666666660 to 733333333333333333333333333333333333333333333333333333333333332c
From 733333333333333333333333333333333333333333333333333333333333332c to 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8
From 7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8 to 8cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc4
From 8cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc4 to 9999999999999999999999999999999999999999999999999999999999999990
From 9999999999999999999999999999999999999999999999999999999999999990 to a66666666666666666666666666666666666666666666666666666666666665c
From a66666666666666666666666666666666666666666666666666666666666665c to b333333333333333333333333333333333333333333333333333333333333328
From b333333333333333333333333333333333333333333333333333333333333328 to bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4
From bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4 to ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0
From ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0 to d99999999999999999999999999999999999999999999999999999999999998c
From d99999999999999999999999999999999999999999999999999999999999998c to e666666666666666666666666666666666666666666666666666666666666658
From e666666666666666666666666666666666666666666666666666666666666658 to f333333333333333333333333333333333333333333333333333333333333324
From f333333333333333333333333333333333333333333333333333333333333324 to ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Entonces buscamos en el archivo los valores que entren en alguno de los rango anteriores, se ordenan en RAM y se escriben en un archivo aparte. Una vez completado el proceso para todos los sub-rangos se unen los archivos en uno solo y se borra el archivo desordenado.

Esto se puede hacer así debido a que la distribución de los registros es uniforme en el rango original de A a B, en caso de que la data este sesgada y existan mas valores en un sub-rango dado es conveniente poner un limite de cantidad de registros leídos para que el mismo no sobrepase la cantidad de RAM.

Saludos!
162  Seguridad Informática / Criptografía / Re: Cifrado Schneider en: 4 Enero 2021, 21:56 pm
Hay un espacio entre un hash y otro, o solo fue error al copiar y pegar?
Realmente hay que buscar mas información de como cifran esos dispositivos. Ya que podria ser cualquier cosas ese hash, md5, sha256, hmac de alguno de los anteriores o otros, tambien puede ser algun Key derivation iterado N cantidad de veces.

Asi como lo pintas ni idea. Busca en google que tipo de cifrado utiliza ese dispositivo.

Saludos!
163  Seguridad Informática / Hacking / Re: ¿Diferencias en cuanto a la seguridad en las cookies http vs https? en: 27 Diciembre 2020, 06:39 am
¿eso quiere decir que teniendo un sitio web sin certificado SSL/TSL estoy bajo un riesgo SI O SI?

Si.

Sencillamente en una comunicación sin cifrado toda la información va en texto plano, cualquier router intermedio entre el cliente y el servidor puede examinar los paquetes y extraer información sensible, Cookies, Datos de formularios, etc..

Saludos!
164  Programación / Bases de Datos / Re: Extraño: select con offset y limit devuelve datos duplicados en: 26 Diciembre 2020, 06:28 am
si todos los registros tienen el mismo valor en el campo fecha no deberia el gestor ordenarlos por algun otro campo o debo indicarlo explicitamente???

Debes de indicarlo explícitamente., De hecho no deberias de utilizar la fecha como campo para ordenarlos, lo ideal es utilizar el ID.

Saludos
165  Programación / Desarrollo Web / Re: [Pregunta]: ¿Existe una vulnerabilidad de inyección en esta consulta? en: 7 Diciembre 2020, 21:46 pm
aclarar que tanto los parametros $x, como $y son constantes y no son datos que el usuario envía, un ejemplo:

Código
  1. $datos = x::Consulta('id_user', 61); // son constantes, no datos que un usuario ingresa

Correcto no es vulnerable solo por esa parte, por que aseguras que son constantes.

Los prepare statements ayudan a prevenir los SQL injection si, si y solo si se utilizan como debe de ser, es decir  utilizando la funcion diseñada para pasar los parametros al sql statement bindParam()

De otra forma y tomando los datos directo del input del user si serian vulnerables.

Saludos!
166  Seguridad Informática / Hacking / Re: Base de datos web en: 6 Diciembre 2020, 03:44 am
Pues si quieres vulnerar bases de datos, lo ideal es que aprendas SQL para los distintos gestores como mysql, sqlserver, sqlite etc... aunque en general es muy similar entre unos y otros, hay diferencias sutiles que te pueden ayudar entre un sistema y otro.

Seria algo tonto decir que puedes hackear una base datos cuando no se sabe realizar consultas, subconsultas, uniones etc..

Minimo aprender lo basico.

Saludos!
167  Programación / Bases de Datos / Re: Extraño: select con offset y limit devuelve datos duplicados en: 6 Diciembre 2020, 03:38 am
El problema es la fecha de inserción "order by fecha_insercion asc", como hay registros duplicados de fecha no es posible que mysql guarde que registros en base a la fecha ya te envió previamente, tiene que ser forzosamente un order by ID.

Sobre que te devuelva 6 registros en lugar de 5, eso parece ser error de la funcion que llama a ese procedimiento de mysql.

Saludos!
168  Programación / Programación C/C++ / Re: ¿Cómo crear una función? en: 26 Noviembre 2020, 16:04 pm
El detalle de que no pase de Enero debe se tu codigo por que ejecute el mio y muestra todos los meses.

Sobre si se puede hacer para string claro:

Código
  1. #include<stdio.h>
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. //Fuera de main
  6. string meses[12] = {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
  7.  
  8. int main () {
  9. for(int i = 0 ; i < 12; i++){
  10. cout<<"Mes "<<i+1<<" "<<meses[i]<<endl;
  11. }
  12. }

Lo ejecuto y muestra

Código:
C:\codigos>g++ meses.cpp -o meses.exe

C:\codigos>meses
Mes 1 Enero
Mes 2 Febrero
Mes 3 Marzo
Mes 4 Abril
Mes 5 Mayo
Mes 6 Junio
Mes 7 Julio
Mes 8 Agosto
Mes 9 Septiembre
Mes 10 Octubre
Mes 11 Noviembre
Mes 12 Diciembre
169  Programación / Programación C/C++ / Re: ¿Cómo crear una función? en: 26 Noviembre 2020, 15:43 pm
Antes que nada los arreglos se empiezan a contar desde 0.


Código
  1. //Fuera de main
  2. cons char *meses[12] = {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
  3.  
  4. //En main
  5. for(int i = 0 ; i < 12; i++){
  6. cout<<"Mes "<<i+1<<" "<<meses[i]<<endl;
  7. }

Saludos!
170  Seguridad Informática / Hacking / Re: Salts en hashes Bitcoin "wallet.dat" en: 23 Noviembre 2020, 20:58 pm
¿Por qué utiliza entonces salts Bitcoin Core en sus “wallet.dat”? Supongo que para que los hashes sean siempre diferentes aun utilizando la misma contraseña. Eso protege al menos de las tablas arco iris.

Exacto, sin los SALT seria muy facil precalcular todas las tablas con los HASH para todas las contraseñas y guardar las mismas tablas  para futuras wallets "encontradas". Ten en cuenta que el proceso es el siguiente:

Tu passphrase es combianada con el SALT (8 bytes random) y es Iterada una N cantidad veces en un proceso que se llama derivacion de llave una función mas o menos asi:

Código
  1. keyderivation("sha512",passphrase,salt,N);

Este proceso hace N-1 veces la operación SHA512 del resultado SHA512(passphrase + salt);

Esto te da un arreglo de 64 BYTES o un string de 128 caracteres en hexadecimal

Y con ese resultado procede en un proceso aparte a Descifrar tu MasterKEY, la masterKEY descifrada se utiliza para descifrar tus llaves Privadas con las cuales se pude mover el BTC.

Con el proceso Anterior imagina que tienes 2 carteras con SALT diferente y password "Hola" pero con el mismo numero de Iteraciones N

el proceso para la cartera A te dara un arreglo de  64 BYTES totalmente distinto parta la cartera B, incluso teniendo la misma contraseña.

Ahora imagina que Quitas el SALT de la ecuación quedaría algo asi:

Código
  1. keyderivation("sha512",passphrase,"",N);

Con las mismas carteras A y B, el proceso te daría el mismo juego de 64 bytes para el mismo password.

Esa es la razón del SALT.

Ahora imagina si a este proceso le agregas un numero de iteraciones N muy grande, mi cartera personal de BTC tiene un N de mas de 100 Millones (lo normal es que sea entre 100 mil y 200 mil), incluso con los GPU mas rapido solo podrias probar 1 o 2 passphrase por segundo, lo normal es que sean unas 2000 palabras por segundo.

EDITO: Por cierto, muy bueno tu blog https://albertobsd.dev/blog/

Gracias!!

Saludos!
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ... 235
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines