jueves, 3 de marzo de 2011

Cifrando lo cifrado

(02:23:46) jackepc@*****.org: cualquier cifrado es bueno
(02:23:50) jackepc@*****.org: mezclado
(02:23:56) jackepc@*****.org: primero uno luego otro luego otro
(02:24:10) jackepc@*****.org: un rot13 
(02:24:29) jackepc@*****.org: y finalmente eso tiene ya que ser chungo de descifrar por cualquiera
(02:24:44) jackepc@*****.org: si le aplicas 12 cifrados a algo

A partir de la versión 5 de PHP mayor o igual a 5.1.2 existe la función hash, que permite cifrar con diferentes algoritmos sin tener que pasar por funciones únicas para cada cifrado...

La función hash_algos() devuelve un array con todos los cifrados disponibles según la versión.

<?php
print_r(hash_algos());
>

Dando como salida:

$ php hash.php 
Array
(
    [0] => md2
    [1] => md4
    [2] => md5
    [3] => sha1
    [4] => sha224
    [5] => sha256
    [6] => sha384
    [7] => sha512
    [8] => ripemd128
    [9] => ripemd160
    [10] => ripemd256
    [11] => ripemd320
    [12] => whirlpool
    [13] => tiger128,3
    [14] => tiger160,3
    [15] => tiger192,3
    [16] => tiger128,4
    [17] => tiger160,4
    [18] => tiger192,4
    [19] => snefru
    [20] => snefru256
    [21] => gost
    [22] => adler32
    [23] => crc32
    [24] => crc32b
    [25] => salsa10
    [26] => salsa20
    [27] => haval128,3
    [28] => haval160,3
    [29] => haval192,3
    [30] => haval224,3
    [31] => haval256,3
    [32] => haval128,4
    [33] => haval160,4
    [34] => haval192,4
    [35] => haval224,4
    [36] => haval256,4
    [37] => haval128,5
    [38] => haval160,5
    [39] => haval192,5
    [40] => haval224,5
    [41] => haval256,5
)

Aprovechando esto se podría hacer un script que cifrase una cadena con 42 algoritmos.

function Cifrarsobrecifrado($cadena) {
        $algoritmos = hash_algos();
        foreach($algoritmos as $unoauno) {
                $cadena = hash($unoauno,$cadena);
                echo $cadena . "\n";
        }
        return $cadena;
}

$probando = Cifrarsobrecifrado('contrasenasecreta');
echo $probando;

Lo que da una salida de:
$ time php hash.php 
8e0ec964504817deb87afbf4d542b921
7c4d2d60feb6f152fe4148530b5aa8a7
801668e2df10c4f3b8cf1d5a7c74d5e7
04552b6704512181bc44eab7505799caf5cc1004
fcb8f1c23d9a3832e84661792af56a46658056636b306766f405c6f6
e3ec0be901f70c1e1f9ea9ea7857190cbf18b36c66b05dbf8db23ff2aaa34237
5a2780415e3d66ede2032a912e873735f5ff99e3f4b45988fd29a3e8e65123f6ee63f5e0b74155401b100d42a206a2be
26f68e9a3f23460c4ec1c67184d137585a0cc17def2d6cdf5cebd1f7db7fa5d6348988332044406901333b2369d2d6765007fba0d6249d9183a2dda38a5baf0e
59fddea5abe907057e19cd42858e7c49
5dd929a6bd7bd13fa8f6c2f39b6ee8aca4388270
62ba3ca82240c584920a24b0b2274ab9a79d45dd40a5ab9596e5e8960bfc92ff
cc528927b90ea4df810f797cce394a8b2ffb73594ccf727698059142e23d5834c0fa3e457c43c867
985840f12fc03a250f4393bf9e985010e155650cc472b8daaf1a3ce457cfa7822ff0d22f91a01c8c82ef80c4ad23f50f5331b99fa80a724e2de43b8d1beac738
fc5c829703f13e5626b5253897957a95
d831f81379f02d9db2e74038fc8bba8dcda0ae71
83c1b1599271ddedc453d3c59854212807131482a33313f9
11c04b0675ce420b1ceccac10edd42ac
b45f53747ebc0bef506415bf8ecd6bd387ee6481
dd91e00da7b7eca013cddf687d0a0a0860cc1026374107db
8a2749017fe9536c9810f355410eeed6b264276705da96363e54829cead4518c
ab6962656cece9568f2b3b39b6c749c6a60280fcb78f582a63d3057aeb30cc77
d04eceb0d5bef915edf3889ed870afe69f444475150c356a8d7fdf3d8d405edd
63501291
a5002b33
7ca961d0
9b06433a9a6670c5ffcc05a35b65c321c4bfe818e447631d873cd02201a25942a7fda24138cb9c9461bda6acb8c63e2cf59f97c0e2a90a4777836a76ff6b0e62
364a8fcfe521d311dcee3d52856a317caa979c3b7f610ae2d268fe0d64b89518ee92078e98f8b54ad6fe88a727d3b96eee1cd882d4a9176e655ca268371472b5
c5f78c84eab25b7478ccf88ab2cee435
a8f97b78f41671fe2421aac1e3afb976988aa4b6
1ac08a43ca76188e15cbff297fd7bdf8a81a3d0be8ebceef
fcf510c9681fc40d09f365f8b2ca8f2bb4e84c13f4b7dce7eb3ffb2e
ac1aa5c224a3ecf7c5f3e4309e495584550d7096d39ab56bfc8eef8110d84e53
69e9b462043de728187548e00dbba6b9
677560b09b3eb1f57b923b33b21e3efa1ad233eb
04a875dfceaaa74a7b3bebdbb5d9955a10e2e9cd10cb23ce
4ae4c7c9586f4945fb1abb01e67f6f90f18cda4c3bffa55f22be3cc5
d67cec989d7c4ea6bb51bc133f90b8073925ffb3e077c13be357609e2d83d27f
7e2fde43b6aa9e23257364519df6dc00
3281f44da1ce5c91f7197954aa4be95c7566a29d
9ce4de6db48260d500da19813e39c8e34ed6105754d68dff
1a56671a0876314b02a37ede0d895649208481e56923f0e4c7df3d68
bece05d589767418fef23db81029a287b03cea592d57462bc5c35fb7ea87f906
bece05d589767418fef23db81029a287b03cea592d57462bc5c35fb7ea87f906
real 0m0.055s
user 0m0.044s
sys 0m0.004s

Conclusión: Si te resfrias tampoco hace falta que vayas al médico, puedes beber limonada y zumos de naranja de la época. No se requiere pasar por tantos cifrados para generar claves seguras pero pasar por un par de ellos y combinar algortimos aleatorios puede estar bien.

1 comentario: