2016-04-10 15 views
0

Ich möchte Daten aus dem Eingabestream verschlüsseln und sie schreiben, ich bin mir nicht sicher, ob dies der richtige Weg ist?Verschlüsseln von Daten in des ecb

Zum Beispiel bin ich über diese Linie nicht sicher: in_encrypt.read((char *)pt, BLOCK_SIZE); wenn ich das letzte Mal lese vor EOF erreicht ist kürzer als 8 sein könnte und so wird failbit eingestellt werden, aber ich werde Daten der Länge verschlüsseln 8.

Ist es irgendwie möglich, die Länge der Daten zu erhalten, die ich tatsächlich aus dem Stream gelesen habe? Wenn ja, könnte ich dann Daten genau dieser Länge verschlüsseln BLOCK_SIZE = 8?

EVP_CIPHER_CTX ctx; 
EVP_EncryptInit(&ctx, EVP_des_ecb(), key, NULL); 

while(!in_encrypt.eof()) 
{ 
    in_encrypt.read((char *)pt, BLOCK_SIZE); 
    EVP_EncryptUpdate(&ctx, ct, &tmpLength, pt, BLOCK_SIZE); 
    out_encrypt.write((char *)ct, tmpLength); 
} 

EVP_EncryptFinal(&ctx, ct, &tmpLength); 
out_encrypt.write((char *)ct, tmpLength); 
+0

Der ECB-Modus bietet nur Vertraulichkeit, er ist nur für einen Block von Daten nützlich (nicht mehrere Blöcke wie eine beliebig große Datei), und Sie müssen einen MAC hinzufügen, um den ECB-Modus sicher zu verwenden. Sie sollten wahrscheinlich eine authentifizierte Verschlüsselung verwenden, da sie sowohl Vertraulichkeit als auch Authentizität bietet. Siehe [Authentifizierte Verschlüsselung und Entschlüsselung mit EVP] (http://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption) im OpenSSL-Wiki. – jww

+0

Ich weiß, das ist in der Praxis nicht verwendbar es ist nur eine schulische Arbeit – lllook

Antwort

1

Von this Seite, rufen in_encrypt.gcount().

+0

in Ordnung, krank brauchen ein paar Gläser – lllook

Verwandte Themen