Я искал какое-то время и не смог найти ни одного документа о шифровании CryptoPP::TEA.
Кто-нибудь знает, как шифровать данные с помощью CryptoPP::TEA?
Спасибо.
Я искал какое-то время и не смог найти ни одного документа о шифровании CryptoPP::TEA.
Кто-нибудь знает, как шифровать данные с помощью CryptoPP::TEA?
Спасибо.
Кто-нибудь знает, как шифровать данные с помощью CryptoPP::TEA?
Crypto++ предоставляет реализации для TEA и XTEA. Я помню, что могут быть некоторые проблемы взаимодействия, потому что есть более новый вариант TEA (но я не помню подробностей).
TEA и XTEA — это просто блочные шифры, поэтому их можно использовать как любой другой блочный шифр (например, 3DES, AES или Cameilla). Поскольку его можно использовать как любой другой блочный шифр, код ниже взят с вики-страницы CBC Mode Crypto++. . Все, что я сделал, это сменил AES на TEA.
Вот вывод программы:
$ ./cryptopp-test.exe
plain text: CBC Mode Test
cipher text: 483ABA61693D885532604E376703A91D
recovered text: CBC Mode Test
А вот и программа:
AutoSeededRandomPool prng;
SecByteBlock key(TEA::DEFAULT_KEYLENGTH);
prng.GenerateBlock( key, key.size() );
byte iv[ TEA::BLOCKSIZE ];
prng.GenerateBlock( iv, sizeof(iv) );
string plain = "CBC Mode Test";
string cipher, encoded, recovered;
/*********************************\
\*********************************/
try
{
cout << "plain text: " << plain << endl;
CBC_Mode< TEA >::Encryption e;
e.SetKeyWithIV( key, key.size(), iv );
StringSource ss(plain, true,
new StreamTransformationFilter( e,
new StringSink( cipher )
) // StreamTransformationFilter
); // StringSource
}
catch( const CryptoPP::Exception& e )
{
cerr << e.what() << endl;
exit(1);
}
/*********************************\
\*********************************/
// Pretty print cipher text
StringSource ss(cipher, true,
new HexEncoder(
new StringSink( encoded )
) // HexEncoder
); // StringSource
cout << "cipher text: " << encoded << endl;
/*********************************\
\*********************************/
try
{
CBC_Mode< TEA >::Decryption d;
d.SetKeyWithIV( key, key.size(), iv );
StringSource ss(cipher, true,
new StreamTransformationFilter( d,
new StringSink( recovered )
) // StreamTransformationFilter
); // StringSource
cout << "recovered text: " << recovered << endl;
}
catch( const CryptoPP::Exception& e )
{
cerr << e.what() << endl;
exit(1);
}