Je songe à une réécriture complète d’un de mes outils que j’utilise le plus, mnkPasswordKeeper, en utilisant openssl pour en simplifier son code (et pour un meilleur système de cryptage, surtout en sachant qu’il utilise bêtement le mode ECB (voir Block cipher modes of operation).

La première étape a été de voir comment openssl marchait. Voici quelques snippets qui pourraient être pas mal utiles.

sha256 sur une string:

    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, pass, strlen(pass));
    SHA256_Final(key, &sha256);

cryptage AES 256 en cbc:

    EVP_CIPHER_CTX ctx;
    const EVP_CIPHER *cipher_type
    unsigned char *iv, *key;

    /* Don't forget to initialize memory for iv and key */
    /* Don't forget to set key as well */

    EVP_CIPHER_CTX_init(&ctx);

    cipher_type = EVP_aes_256_cbc();
    EVP_EncryptInit_ex(&ctx, cipher_type, NULL, NULL, NULL);
    RAND_bytes(iv, EVP_CIPHER_CTX_iv_length(&ctx));

    EVP_EncryptInit_ex(&ctx, NULL, NULL, key, iv);
    // 'in' contains message to encrypt, 'in_len' its length.
    EVP_EncryptUpdate(ctx, out, &out_len, in, in_len);
    EVP_EncryptFinal_ex(ctx, out + out_len, &out_len);

    EVP_CIPHER_CTX_cleanup(&ctx);

Pour le décryptage, la méthode est la même, il faut juste utiliser les fonctions EVP_DecryptInit_ex, EVP_DecryptUpdate et EVP_DecryptFinal_ex.

Je posterai demain un petit tool qui permet de crypter/décrypter un fichier complet avec les sources.

Leave a reply

required

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>