So entschlüsseln Sie String -Daten in C ++ mit Crypto ++, wo die ursprüngliche Zeichenfolge in Python mit Pycrypto verschlüsselt wird

StackOverflow https://stackoverflow.com/questions/4593793

  •  15-10-2019
  •  | 
  •  

Frage

Ich habe gerade eine Datenzeichenfolge mit PyCrypto leicht verschlüsselt, weiß aber nicht, wie man sie in Crypto ++ entschlüsselt. Jemand kann mit einem Beispiel -Entschlüsselungscode in C ++ mit Crypto ++ helfen? Hier ist mein Python -Code:

key = '0123456789abcdef' 
data = "aaaaaaaaaaaaaaaa" 
iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16)) 
encryptor = AES.new(key, AES.MODE_CBC, iv) 
enc = encryptor.encrypt(data)
War es hilfreich?

Lösung

Dieser Code stammt aus einem Beispiel aus dem Jahr 2005, sollte Ihnen jedoch einen guten Ausgangspunkt geben:

std::string ciphertext = "..."; // what Python encryption produces
std::string decryptedtext;

byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];

// populate key and iv with the correct values

CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );

CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink( decryptedtext ) );
stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
stfDecryptor.MessageEnd();

// it's all in decryptedText now

Andere Tipps

Gleicher Ansatz wie @jon, ein bisschen vereinfacht

std::string ciphertext = "..."; // what Python encryption produces
std::string decryptedtext;

byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];

// populate key and iv with the correct values

CryptoPP::CBC_Mode< CryptoPP::AES >::Decryption decryptor;
decryptor.SetKeyWithIV(key, sizeof(key), iv);


CryptoPP::StringSource(ciphertext, true,
        new CryptoPP::StreamTransformationFilter( decryptor,
            new CryptoPP::StringSink( decryptedtext )
        )
);

Das true Parameter zu CryptoPP::StringSource bedeutet "konsumieren Sie die gesamte Eingabe"

Beachten Sie, dass Sie (offensichtlich) Ihr C ++ entschlüsselt haben, um die IV zu kennen, die Sie zur Verschlüsselung verwendet haben. Da Sie in Python eine zufällige IV generieren, besteht die populäre Technik darin, die IV auf den verschlüsselten Text vorzubereiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top