|Portada|Blog|Space|
[Índice] > Revocando claves con la ayuda de C
Les cuento, como bernabé (dklight) había perdido su clave privada de gpg
tuvo que revocarla, el problema fue que el único certificado de
revocación que tenía era uno impreso, y tuvo que transcribirlo a la
computadora.
Lamentablemente hay letras que son muy parecidas en algunas fuentes, por
lo que al transcribirlo hubieron errores, así que decidí hacer este
programa para encontrar el certificado de revocación correcto.
Por suerte en unas horas de procesamiento en mi laptop lo pude encontrar
sin dramas. Y ahora la clave ya está revocada.
Como verán el código se basa en tener clases de equivalencia de
caracteres, e ir probando. No es lo mejor, pero funcionó :)
Les paso el código (que escribí en 10 minutos, por eso es feo):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * texto =
"-----BEGIN PGP PUBLIC KEY BLOCK-----\n"
"Version: GnuPG v1.4.6 (GNU/Linux)\n"
"Comment: A revocation certificate should follow\n"
"\n";
char * Clave =
"iFsEIBECABsFAkVOQvsUHQBjb3BpYSBkZSBzZWd1cmlkYWQACgkQAaXT75t4gTRnKACfeA0N326HbEbRtKrCyKCO\n"
"0eVn2GgAmQEr4IMpBB1ilwjls9zwNc7aRmaH\n"
"=m85D\n";
char * clave;
char * texto2 =
"-----END PGP PUBLIC KEY BLOCK-----\n";
char * posibles[]={
"I1l", "0DO8", NULL
};
void corrige(int * pos, int * clase){
if(!posibles[*clase]){
FILE * f = fopen("revoke.asc", "w");
fprintf(f, "%s%s%s", texto, clave, texto2);
fclose(f);
system("gpg --import revoke.asc");
return;
}
int i;
for(i=0; posibles[*clase][i]; i++){
clave[*pos]=posibles[*clase][i];
corrige(pos+1, clase+1);
}
}
int main(void){
int i, n=0;
int posiciones[500], clases[500];
clave=strdup(Clave);
for(i=0; clave[i]; i++){
char c = clave[i];
for(clases[n]=0; posibles[clases[n]]; clases[n]++){
if(strchr(posibles[clases[n]], c)){
posiciones[n++]=i;
goto continuar;
}
}
continuar:
while(0);
}
corrige(posiciones, clases);
return 0;
}
---------
Los documentos en este sitio se encuentran licenciados bajo la GFDL.
Ver comentarios: [Hay i comentarios]
Para agregar un comentario: agregue a la URL: ?do=show_comment_form (explicación)