Que virá mais tranquila
Com a fome do povo
Com pedaços da vida
Como a dura semente
Que se prende no fogo
De toda multidão
Acho bem mais
Do que pedras na mão..."
(Zé Ramalho - A Terceira Lâmina)
A OpenSSL é uma ferramenta fantástica. Tem apresentado alguns problemas de segurança, mas quem desenvolve de verdade sabe que problemas de segurança qualquer e talvez ouso dizer 'todas' as ferramentas possuem. Mas a OpenSSL é uma framework poderosa e simples de criptografia e vale a pena conhecê-la bem.
Eu tenho desenvolvido usando a OpenSSL há muitos anos, inclusive usando os recursos de BIGNUM dela, apesar de gostar mais de usar BIGNUM de outras bibliotecas como a GMP.
Abaixo estou colando mais dois programas para mostrar como é fácil fazer algumas coisas usando criptografia com a OpenSSL. São dois programas para geração de checksum(hash de binários).
_________________________________________________________________________________
/*
* MD5SUM using OpenSSL.
*
* Glaudson Ocampos - <glaudson@securitylabs.com.br>
*
* Data da Criacao: 24 de março de 2015.
* Última modificacao: 24 de marco de 2015.
*
* Compile com:
* $ gcc -o md5sum md5sum.c -lssl -lcrypto -Wall
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <openssl/md5.h>
#define ERROR -1
unsigned char hash[MD5_DIGEST_LENGTH];
char *filename;
int
md5sum_print(){
unsigned int i =0;
for(i = 0; i < MD5_DIGEST_LENGTH; i++){
printf("%02x",hash[i]);
}
printf(" %s\n", filename);
return 0;
}
int
md5sum(){
int bytes;
MD5_CTX md5_context;
unsigned char data[1024];
FILE *arq = NULL;
arq = fopen(filename,"rb");
if(arq == NULL){
fprintf(stderr,"Erro na abertura do arquivo!\n");
fflush(stderr);
_exit(ERROR);
}
if(MD5_Init(&md5_context) == 0){
fprintf(stderr,"Erro na inicializacao de md5 context!\n");
fflush(stderr);
_exit(ERROR);
}
while((bytes = fread(data,1,1024,arq)) != 0) {
MD5_Update(&md5_context, data, bytes);
}
MD5_Final(hash,&md5_context);
fclose(arq);
return 0;
}
void
md5sum_banner(char *progname){
fprintf(stdout,"MD5SUM Using OpenSSL by Nash Leon.\n");
fprintf(stdout,"Uso: %s <arquivo>\n", progname);
fflush(stdout);
}
int
main(int argc, char *argv[]){
if(argc < 2){
md5sum_banner(argv[0]);
_exit(0);
}
filename = argv[1];
if(md5sum() != 0){
fprintf(stderr,"Erro em md5sum()!\n");
fflush(stderr);
_exit(ERROR);
}
md5sum_print();
return 0;
}
--------------------------------------------------------------------------------------------------------------------------
Abaixo temos o mesmo programa, mas utilizando SHA1:
_________________________________________________________________________________
/*
* SHA1SUM using OpenSSL.
*
* Glaudson Ocampos - <glaudson@securitylabs.com.br>
*
* Data da Criacao: 24 de março de 2015.
* Última modificacao: 24 de marco de 2015.
*
* Compile com:
* $ gcc -o sha1sum sha1sum.c -lssl -lcrypto -Wall
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <openssl/sha.h>
#define ERROR -1
unsigned char hash[SHA_DIGEST_LENGTH];
char *filename;
int
sha1sum_print(){
unsigned int i =0;
for(i = 0; i < SHA_DIGEST_LENGTH; i++){
printf("%02x",hash[i]);
}
printf(" %s\n", filename);
return 0;
}
int
sha1sum(){
int bytes;
SHA_CTX sha1_context;
unsigned char data[1024];
FILE *arq = NULL;
arq = fopen(filename,"rb");
if(arq == NULL){
fprintf(stderr,"Erro na abertura do arquivo!\n");
fflush(stderr);
_exit(ERROR);
}
if(SHA1_Init(&sha1_context) == 0){
fprintf(stderr,"Erro na inicializacao de sha1 context!\n");
fflush(stderr);
_exit(ERROR);
}
while((bytes = fread(data,1,1024,arq)) != 0) {
SHA1_Update(&sha1_context, data, bytes);
}
SHA1_Final(hash,&sha1_context);
fclose(arq);
return 0;
}
void
sha1sum_banner(char *progname){
fprintf(stdout,"SHA1SUM Using OpenSSL by Nash Leon.\n");
fprintf(stdout,"Uso: %s <arquivo>\n", progname);
fflush(stdout);
}
int
main(int argc, char *argv[]){
if(argc < 2){
sha1sum_banner(argv[0]);
_exit(0);
}
filename = argv[1];
if(sha1sum() != 0){
fprintf(stderr,"Erro em sha1sum()!\n");
fflush(stderr);
_exit(ERROR);
}
sha1sum_print();
return 0;
}
_________________________________________________________________________________
Uso:
$ ./md5sum /bin/ls
fa97c59cc414e42d4e0e853ddf5b4745 /bin/ls
$ ./sha1sum /bin/ls
86603190e1fa93af608bbcd96e658118b6a5391f /bin/ls
Continuo recomendando fortemente o uso da OpenSSL.
Nenhum comentário:
Postar um comentário
Comentários são moderados visando evitar spams e permitir discussões sadias.