Ich habe eine Größe von 1MB Größe und möchte mit aes_128_ctr verschlüsseln. Ich habe den Quellcode in openssl wie folgt gefunden.openssl aes_128_ctr in c
/* The input encrypted as though 128bit counter mode is being
* used. The extra state information to record how much of the
* 128bit block we have used is contained in *num, and the
* encrypted counter is kept in ecount_buf. Both *num and
* ecount_buf must be initialised with zeros before the first
* call to AES_ctr128_encrypt().
*/
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
const unsigned long length, const AES_KEY *key,
unsigned char counter[AES_BLOCK_SIZE],
unsigned char ecount_buf[AES_BLOCK_SIZE],
unsigned int *num) {
unsigned int n;
unsigned long l=length;
assert(in && out && key && counter && num);
assert(*num < AES_BLOCK_SIZE);
n = *num;
while (l--) {
if (n == 0) {
AES_encrypt(counter, ecount_buf, key);
AES_ctr128_inc(counter);
}
*(out++) = *(in++)^ecount_buf[n];
n = (n+1) % AES_BLOCK_SIZE;
}
*num=n;
}
Meine Frage ist: Um den gesamten 1MB Daten zu verschlüsseln, muss ich eine while-Schleife verwenden, jede 128-Bit zu verschlüsseln? Kann ich diese Funktion nur einmal aufrufen, indem ich die Länge als (1024 * 1024/16) festlege? Und ich verstehe nicht, was diese * num machen. Kann mir jemand das erklären?
Sie müssen die Verschlüsselungsfunktion mehrmals aufrufen, um alle Daten zu verschlüsseln, aber Sie müssen ctr_state struct nur einmal initialisieren, was von der Verschlüsselungsfunktion verwendet wird. Der Parameter num ist ein Zeiger, der auf das Element num der ctr_state-Struktur zeigt: & state-> num. Vielleicht [http://stackoverflow.com/questions/3141860/aes-ctr-256-encryption-mode-of-operation-on-openssl/3146214#3146214) Antwort wird Ihnen helfen. – Linus
Sie sollten * AES_encrypt' und Freunde nicht benutzen. Das ist eine reine Software-Implementierung, so dass Sie keine Hardware-Unterstützung wie AES-NI genießen werden. Sie sollten 'EVP_ *' Funktionen verwenden. Siehe [Symmetrische Verschlüsselung und Entschlüsselung von EVP] (http://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption) im OpenSSL-Wiki. Tatsächlich sollten Sie 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
Möglicherweise verwandt: [AES CTR 256 Encryption-Betriebsmodus unter OpenSSL] (http://stackoverflow.com/q/3141860/608639) (oder zumindest ein Verweis, der bereits auf Stack Overflow zur Verfügung gestellt wurde). Siehe auch [Ist es möglich, den AES CTR-Modus mit der EVP-API zu verschlüsseln] (http://stackoverflow.com/q/3783311). – jww