Witam,
Piszę serwer aplikacji i nie mogę dostać się do danych zaszyfrowanych. O ile szyfrowanie działa o tyle działa ono na zmiennych unsigned char co sprawia kłopot metodzie append klasy string. Stąd moje pytanie, a raczej prośba jak mogę sobie z tym poradzić. Wszelkie pomysły mile widziane. Wolałbym uniknąć kolejnej biblioteki.
Oto mój kod kombinowany na setki sposobów:
#include <string>
#include <cstdio>
#include <string>
#include <openssl/sha.h>
#include <iostream>
class encryptclass{
unsigned char ibuf;
unsigned char obuf;
public:
encryptclass(){
fprintf( stdout , "Encrypt constructor\n" );
}
std::string check_password( std::string pass , std::string hash ){
unsigned char *buf = new unsigned char[ pass.size() ];
int *temporary = new int[ pass.size() ];
SHA_CTX ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, pass.c_str() , pass.size() );
SHA1_Final(buf, &ctx);
std::string asd;
char *x;
for( int i = 0 ; i < pass.size() ; i++ ){
temporary[ i ] = (int)buf[ i ];
if( temporary[ i ] < 0 )
temporary[ i ] *= -1;
//std::ostringstream ss;
//ss << temporary[ i ];
//asd.append( ss.str() );
//if( buf[ i ] < 0 )
//buf[ i ] *= -1;
}
const char *y = (char*)temporary ;//(temporary[ i ] + '0');
asd.append( y );
fprintf( stdout , "%s\n" , y );
std::cout << asd << std::endl;
delete buf;
return asd;
}
};
int main(){
encryptclass *szyfrowanie = new encryptclass();
encryptclass *sz = new encryptclass();
//int *a = szyfrowanie->check_password( "anakonda" , "cas");
//int *b = sz->check_password( "baklazan" , "bbb" );
if(szyfrowanie->check_password( "anakonda" , "cas") == sz->check_password( "baklazan" , "bbb" ) )
fprintf( stdout , "PASSWORD CORRECT\n" );
else
fprintf( stdout , "FAIL\n" );
/*
for( int i = 0 ; i < 3 ; i++ ){
if( a[ i ] != b[ i ] ){
fprintf( stdout , "FAIL\n" );
delete szyfrowanie;
delete sz;
return 0;
}
}
fprintf( stdout , "PASSWORD CORRECT\n" );
*/
delete szyfrowanie;
delete sz;
return 0;
}
Sorry, że taki rozjechany troche kod i w ogóle się nie trzyma kupy.
Moim docelowym zadaniem jest umieszczenie hasha w bazie danych (sqlite) i do metody podawać hasło jawne i hasha z bazy danych.
Hasło jawne chcę hashować i porównywać z tym hashem z jako drugi argument metody.
W bazie danych nie mogę zapisać unsigned char z tego co się orientuję.
I chciałbym operować na stringach (moja zachcianka).
Proszę o pomoc.