Ich habe einen Puffer, in dem ich einige Klartext hinzufügen. Ich möchte OpenSSL-AES-Verschlüsselung verwenden, um den Text zu verschlüsseln, entschlüsseln und auf dem Bildschirm ausdrucken.Verschlüsselung und Entschlüsselung mit C++
Code wird ohne Fehler ausgeführt.
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string>
#include <openssl/aes.h>
using namespace std;
void main()
{
// Buffers
unsigned char inbuffer[1024];
unsigned char encryptedbuffer[1024];
unsigned char outbuffer[1024];
// CODE FOR ENCRYPTION
//--------------------
unsigned char oneKey[] = "abc";
AES_KEY key;
AES_set_encrypt_key(oneKey,128,&key);
AES_set_decrypt_key(oneKey,128,&key);
//--------------------
string straa("hello world\n");
memcpy((char*)inbuffer,straa.c_str(),13);
printf("%s",inbuffer);
//this prints out fine
AES_encrypt(inbuffer,encryptedbuffer,&key);
//printf("%s",encryptedbuffer);
//this is expected to pring out rubbish, so is commented
AES_decrypt(encryptedbuffer,outbuffer,&key);
printf("%s",outbuffer);
//this is not pringint "hello world"
getchar();
}
Ich bin mir der Tatsache, dass einmal in den neuen Puffer platziert, „encryptedbuffer“ und „outBuffer“, sind sie nicht „\ 0“ Nullterminiert, aber auch so, indem Sie die Rohdaten auszudrucken, Ich bekomme nur Müll nach der Entschlüsselung, Am Ende der Entschlüsselung nehme ich an, dass das \ 0 auch entschlüsselt werden sollte und daher sollte der Printf korrekt drucken.
Wer weiß, wie die Entschlüsselung funktioniert?
Auch eine Idee, wie die Puffer mit C++ - Bibliotheken zu drucken, vielleicht cout, und nicht printf?
Der Mechanismus, den Sie für Schlüssel verwenden, ist nicht korrekt. AES ist ein symmetrischer Blockalgorithmus und benötigt einen Schlüssel, der der Blockgröße entspricht. Eine Lösung im PBE-Stil (passwortbasierte Verschlüsselung) verwendet häufig einen entsprechend großen Hash-Auszug des Passworts, um einen Schlüssel in der richtigen Größe zu generieren (in diesem Fall 16 Byte). Das gleiche Passwort, das mit dem gleichen Algorithmus gehashed wurde, wird auf der Empfängerseite verwendet, um den identischen symmetrischen Schlüssel zu erzeugen und die Entschlüsselung durchzuführen. Mit anderen Worten, Ihr Passwort stimmt nicht mit der Chiffre überein. sein * Digest * aus einem Algorithmus, der beiden Seiten bekannt ist. – WhozCraig
(1) Machen Sie 'oneKey' mindestens 16 Bytes (im Moment sind es nur 3 Bytes). Die zusätzlichen Bytes werden ignoriert. (2) Mache "straa" genau 16 Bytes (im Moment sind es nur 12 oder 13 Bytes). (3) Setzen Sie den Schlüssel zwischen den Aufrufen von 'AES_encrypt' und' AES_decrypt' zurück. (4) Überlegen Sie, auf die 'EVP_ *' - Funktionen zu wechseln, die für einen Anfänger einfacher sind. Siehe beispielsweise [Symmetrische Verschlüsselung und Entschlüsselung von EVP] (http://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption) im OpenSSL-Wiki. Verwenden Sie 'EVP_aes_128_ecb()' als Chiffre für ein gleichwertiges Programm. – jww
schätzen die klaren Anweisungen! Alles scheint jetzt mehr Sinn zu machen! :) danke –