Verschlüsselte Daten als String
Ich bin ziemlich neu in der Verschlüsselung und C-Sprache, daher ist dies möglicherweise ein offensichtliches Problem, aber ich finde keine Möglichkeit, das Problem zu lösen.
Ich erstelle eine Anwendung auf C und verwende OpenSSL für die Verschlüsselung unter Linux.
Ich habe von dieser URL ein Beispiel für C-Code erhalten, mit dem ein String mit SHA verschlüsselt und entschlüsselt werden kann:http://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption
#include <openssl/conf.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <string.h>
int main(int arc, char *argv[])
{
unsigned char *key = "01234567890123456789012345678901";
unsigned char *iv = "01234567890123456";
/* Message to be encrypted */
unsigned char *plaintext = "The quick brown fox jumps over the lazy dog";
unsigned char ciphertext[128];
unsigned char decryptedtext[128];
int decryptedtext_len, ciphertext_len;
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
OPENSSL_config(NULL);
ciphertext_len = encrypt(plaintext, strlen(plaintext), key, iv,ciphertext);
printf("Ciphertext is:\n");
BIO_dump_fp(stdout, ciphertext, ciphertext_len);
EVP_cleanup();
ERR_free_strings();
return 0;
}
int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
unsigned char *iv, unsigned char *ciphertext)
{
EVP_CIPHER_CTX *ctx;
int len;
int ciphertext_len;
/* Create and initialise the context */
if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors();
if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
handleErrors();
if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
handleErrors();
ciphertext_len = len;
if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors();
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);
return ciphertext_len;
}
Ich arbeite gut und ich habe es perfekt gemacht. Was ich gesehen habe, ist, dass ich dieses verschlüsselte Ergebnis als Zeichenfolge behandeln und an eine größere Zeichenfolge anhängen muss (eigentlich ein SQL-Befehl). Der Code heißt so:
ciphertext_len = encrypt(it, strlen(it), key, iv,ciphertext);
strcat(bigstring,ciphertext);
Als ich versucht habe, dies zu tun, wurde die gesamte Saite verändert und unbrauchbar. Ich vermute, dass das Problem von Binärdaten herrührt, die als Zeichen behandelt werden, und dies schließt Steuerzeichen als oder Leerzeichen ein.
Gibt es eine Möglichkeit, diese verschlüsselten Daten als Zeichenfolge zu behandeln, ohne sie zu ändern? Sollte ich stattdessen eine andere Art der Verschlüsselung verwenden?