Comprobación de números primos con el FIPS186

Que no se diga, aquí está el código del algoritmo y una comprobación para ver el número de falsos positivos y negativos:

!/usr/bin/env python

-- encoding: utf-8 --

import random

""" FIPS186

Step 1. Set i = 1 and n > or = to 50.

Step 2. Set w = the integer to be tested, w = 1 + 2 a m, where m is odd and 2 a is m, where m is odd and 2 is the largest power of 2 dividing w - 1

Step 3. Generate a random integer b in the range 1 < b < w

Step 4. Set j = 0 and z continue.

untagged

Introducción a la criptografia, con Python: DSA (V -2)

Después de 8 meses de demorar el momento de enfrentarse a DSA, continúa esta introducción a la criptografía ( aaaleluyaaaa... )

Pues seguimos con la introduccion a la criptografia... acababamos de ver el cifrado usando ElGamal y quedaba pendiente el algoritmo de firmado usando DSA para pasar a la sexta parte ( hashes de nuevo ), así que ahí vamos, documentación y código intercalado:

¿Que es DSA?
DSA (Digital Signature Algorithm, en español Algoritmo de Firma
digital) es un estándar del Gobierno Federal de los Estados Unidos
de América o FIPS para firmas digitales. Fue un Algoritmo continue.

untagged

Obtener el número de bits de un número en Python [tip]

Perdón a los que les estoy rallando con esto de los tips, son cosas que cuando no se te ocurren no sabes de donde sacarlas, pero ya escritas son simples y obvias, sin más dilación:

def bitN(i):

return len(bin(i)[2:])

Me explico, se pasa a binario bin(i), se separa el número del indicador de formato [2:] (0b) y se muestra su longitud len( )

Saludos

untagged

Humo y espejos con el terminal y `cat`

Cross-posteado en el_blog_de_HackXCrack

Si alguna vez se te ocurrió lanzar un cat a un archivo que no fuera de texto, como una imágen o un ejecutable hay ciertas posibilidades de que notaras que había pasado algo raro cuando el comando volvió, el terminal "pensó" que habías escrito algunos caracteres... es más, si pulsaste [enter] para pasar a una línea limpia pensando que solo es basura que dejó el archivo, el terminal había intentado ejecutar el comando!

Me atreveré a decir que lo que pasó fue que en algún momento el cat mostró el par de caracteres \x1b Z ( \x1b es ESC ), mostrando algo como "62;9;c", hay más continue.

untagged

Adivina el lenguaje [solución]

Se ve que andamos con poca imaginación hoy, así que mientras tanto aquí va un pequeño reto, a ver si alguien consigue adivinar en que lenguaje esotérico está escrito este código: http://pastebin.com/Lb4qJtjY

Pista: lo que hace el código es mostrar por pantalla CodigoParaLlevar (sin el salto de línea de rigor :P )

Actualización: ya pasó un tiempo, así que esta_es_la_solución

Suerte

untagged

Cifrando con autómatas celulares

Hoy traigo un pequeño experimento, este es un cifrado que se basa en el mismo concepto que otro código anterior [ Un_autómata_celular_para_generar_números pseudo-aleatorios ], pero en vez de generar números aleatorios, sirve como cifrado de flujo [ http://pastebin.com/uX1WpGjF ] .

La idea es simple, se toma un campo de la variante "3-4 life" ya que genera patrones mas caóticos, se le introduce una figura que se sabe que se expande rápidamente [ http://videobin.org/+2be/2ly.html ], se avanza 200 generaciones, se hace XOR de las céldas y una clave ( cada celda con un bit de la clave ), y se vuelve a avanzar 75 generaciones.

Después los bits de cada continue.

untagged

Como monitorear un terminal desde otro [tip]

En el terminal que se quiere monitorear mkfifo tunel

script -q -f tunel

En el terminal donde se quiere mostrar ( se podría enviar a través de la red o lo que fuera ) cat tunel

Una ventaja (o un inconveniente) es que el que monitorea no puede hacer cambios en el terminal. Por otro lado, si se hace esto, el comando script no devuelve el control hasta que alguien se conecte.

ps: si solo quisieramos guardar las sesiones, sin monitorearlas, solo habría que hacer script -f

A portarse bien ;)

untagged

Escapando caracteres especiales en Python [tip]

Actuliazación: json is the way

Supongamos que tenemos un texto como este:
Bla
blablabla\ /
blabla

Y queremos representarlo todo en una línea sin perder información, como hacerlo? def miniscape(s):

return str([s])[2:-2]

Resultado: \nBla\nblablabla\ /\nblabla\n

Y para darle la vuelta? def miniunscape(s):

i = 0

while True:

   try:

       x = s.index("\\x", i)

       if not((x > 0) and (s[x-1] == "\\")):

           s = s[:x]+chr(int(s[x+2:x+4],16))+s[x+4:]

       i = x + 1

   except:

  
continue.

untagged

[Cheatsheet] de variables inseguras en PHP

Hoy algo de carne, una chuleta sobre las variables superglobales (woh!) no fiables, donde el cliente puede meter mano:

Leyenda:

===============================================================================

$_SERVER: PHP_SELF I argv I argc S GATEWAY_INTERFACE S SERVER_ADDR S SERVER_NAME S SERVER_SOFTWARE S SERVER_PROTOCOL I REQUEST_METHOD I REQUEST_TIME S QUERY_STRING S: Sin comprobar DOCUMENT_ROOT S HTTP_ACCEPT I HTTP_ACCEPT* I HTTP_CONNECTION I HTTP_HOST D: Inseguro para el host por defecto si hace fallback HTTP_REFERER I HTTP_USER_AGENT I HTTPS S: Sin comprobar REMOTE_ADDR S REMOTE_HOST D: Inseguro si el atacante tiene acceso al servidor DNS REMOTE_PORT S SCRIPT_FILENAME S SERVER_ADMIN S SERVER_PORT S SERVER_SIGNATURE S PATH_TRANSLATED I SCRIPT_NAME S REQUEST_URI S PHP_AUTH_DIGEST I PHP_AUTH_USER I PHP_AUTH_PW I AUTH_TYPE I: No he podido comprobarlo PATH_INFO I ORIG_PATH_INFO I: No he podido comprobarlo

$_GET / $_POST / $_REQUEST / $_COOKIE / $argv / $_HTTP_RAW_POST_DATA I

Pero muy mucho, eh!

Notas: $_GET se pasa continue.

untagged

Un tracker BitTorrent en un .php y una tabla MySQL

Esto lleva un rato sin actualizar, así que traigo una cosilla que puede resultar interesante, un tracker de BitTorrent que solo ocupa un archivo .php de 250 líneas y que necesita únicamente una tabla en una base de datos MySQL, además logicamente del servidor web [ announce.php ]

Para montar el tracker hay que subirlo con el nombre announce.php al directorio raíz, de forma que quede algo así: http://www.miservidor.com/announce.php y modificar estas variables:

* $dbhost: La dirección del servidor MySQL.

* $dbuser: El usuario del servidor MySQL.

* $dbpass: La contraseña del servidor MySQL.

* $dbname: La base continue.

untagged

Previous » « Next