Lun May 01, 2006 12:31 pm
|
 |
MidNight
Perlero Nuevo

|
Registrado: 29 Abr 2006
Mensajes: 21
|
|
| split sin divisores comunes |
|
|
Hola allá, primero que todo me gustaría felicitar a los creadores y usuarios de este magnífico foro pues se puede encontrar material de muy alta calidad además de un ambiente muy muy amistoso. Como se puede apreciar es mi primer post, pero visito este sitio hace unos meses y nunca me había surgido la necesidad de postear alguna duda.
Planteo la escena de mi problema:
He desarrollado un algoritmo de cifrado personal para proteger conversaciones y datos personales. En realidad no me interesa usar programas de cifrado populares como PGP y DES-triple pues a mi modo de ver aunque sean 'invulnerables' aparentemente, son demasiado conocidos para mi gusto. El caso es que el prototipo que diseñé técnicamente era mucho más simple y muy probablemente muchisimo menos seguro que estos sistemas mencionados anteriormente. Estaba basado en operaciones ariméticas con los códigos ascii de cada uno de los caracteres; debo decir aunque logré hacerlo funcionar bien y con los pocos conocimientos que poseo de criptoanálisis intenté hacerlo lo más seguro posible pero el desempeño de este no es muy cómodo a mi modo de ver (a razón de 1mb / 8 segs) por lo tanto deseo agilizarlo y he pensado en trabajar con un nuevo método parecido al de las etapas y permutaciones de DES por lo cual necesito dividir la cadena de caracteres del mensaje a cifrar en segmentos de 8 caracteres.
La duda que tengo es la siguiente (que he buscado pero no he podido encontrar):
¿con la función split puedo hacerlo poniendo algun tipo de delimitador intrínseco en ella que me permita indicar la cantidad de carácteres a dividir?
Agradecería que por favor me pudieran informar, en el caso de que no se pueda (como lo sospecho pero prefiero preguntar) si conocen alguna manera rápida y eficiente que crean que podría utilizar. Apreciaría mucho que me la hicieran ver...
Un saludo y gracias. |
|
|
|

Lun May 01, 2006 1:09 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4091
Ubicación: Valladolid, España
|
|
|
|
|
Pues no... split está preparado para dividir una secuencia de caracteres según un delimitador...
Se podría usar como delimitar el patrón /(.....)/ para que nos devolviera conjuntos de números de ese largo, pero rellenaría el array con muchos valores nulos (porque split cree que entre dos conjuntos de números (que son los delimitadores) está el valor que realmente nos interesa (un nulo), cuando no es así.
Para dividir una cadena o secuencia de caracteres, se suele usar substr o mejor, unpack:
| Código: |
#!/usr/bin/perl -l
use warnings;
use strict;
my @lang = ( 'A' .. 'Z', 0 .. 9 );
my $code = join '', map { $lang[rand @lang] } 1..30;
print $code; # 9KFV19DFCSM8BNP59SD97FAOG06YTS
my @chuncks = unpack( "(A5)*", $code );
print "@chuncks"; # 9KFV1 9DFCS M8BNP 59SD9 7FAOG 06YTS |
Ultima edición por explorer el Lun May 01, 2006 1:32 pm, editado 2 veces |
|

Lun May 01, 2006 1:18 pm
|
 |
MidNight
Perlero Nuevo

|
Registrado: 29 Abr 2006
Mensajes: 21
|
|
|
|
|
Hola explorer, muchas gracias por el code con unpack, habia pensado algo similar con substr pero pero no me parecia muy eficiente, ahora unpack me parece una opción formidable aunque se me dificulta un poco esta magnifica funcion, de nuevo muchisimas gracias le echaré una leida al perldoc para implementarla lo mejor posible.
un saludo. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|