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.