как зашифровать данные с помощью Cryptopp::TEA?

Я искал какое-то время и не смог найти ни одного документа о шифровании CryptoPP::TEA.

Кто-нибудь знает, как шифровать данные с помощью CryptoPP::TEA?

Спасибо.


person aj3423    schedule 23.04.2014    source источник


Ответы (1)


Кто-нибудь знает, как шифровать данные с помощью 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);
}
person jww    schedule 23.04.2014