Crypto++ ElGamal-Verschlüsselung
-
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;