?
Hi,
ich versuche gerade mit der Crypto++-Library Daten mit ElGamal zu ver/entschlüsseln. Wenn ich jedoch eine von Crypto++ verschlüsselte Nachricht entschlüsseln will, ist das Result leider nur eine Folge von Nullen. Leider ist Crypto++ scheinbar nur sehr schlecht dokumentiert, eine Dokumentation zu ElGamal habe ich garnicht gefunden.
Kann mir hier irgendwer helfen?
// RFC 5114 1024-bit Keys: http://tools.ietf.org/html/rfc5114
CryptoPP::Integer p("0xB10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C6"
"9A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C0"
"13ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD70"
"98488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0"
"A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708"
"DF1FB2BC2E4A4371");
CryptoPP::Integer g("0xA4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507F"
"D6406CFF14266D31266FEA1E5C41564B777E690F5504F213"
"160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1"
"909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28A"
"D662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24"
"855E6EEB22B3B2E5");
CryptoPP::Integer q("0xF518AA8781A8DF278ABA4E7D64B7CB9D49462353");
CryptoPP::AutoSeededRandomPool rnd;
CryptoPP::Integer x(rnd, 1, q); // private key
CryptoPP::Integer y = CryptoPP::ModularExponentiation(g, x, p);
CryptoPP::ElGamalKeys::PublicKey pubkey;
pubkey.Initialize(p, q, g, y);
CryptoPP::ElGamalKeys::PrivateKey privkey;
privkey.Initialize(p, q, g, x);
std::uint8_t plain[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
CryptoPP::ElGamalEncryptor encryptor(pubkey);
std::vector<std::uint8_t> encrypted(500);
encryptor.Encrypt(rnd, plain, sizeof(plain), &encrypted[0]);
std::vector<std::uint8_t> decrypted(encrypted.size());
CryptoPP::ElGamalDecryptor decryptor(privkey);
decryptor.Decrypt(rnd, &encrypted[0], encrypted.size(), &decrypted[0]);
for(std::uint8_t c : decrypted)
std::cout << (char) c;