如何使用Cryptopp :: TEA加密数据?

时间:2014-04-23 11:17:10

标签: crypto++

我已经搜索了一段时间,无法找到有关CryptoPP :: TEA加密的任何文档。

任何人都知道如何使用CryptoPP :: TEA加密数据?

感谢。

1 个答案:

答案 0 :(得分:1)

  

任何人都知道如何使用CryptoPP :: TEA加密数据?

Crypto ++提供TEA和XTEA的实现。我记得可能存在一些互操作问题,因为有一个较新的TEA变体(但我不记得细节)。

TEA和XTEA只是分组密码,因此它们可以像任何其他分组密码一样使用(例如3DES,AES或Cameilla)。因为它可以像任何其他分组密码一样使用,下面的代码来自Crypto ++的CBC Mode wiki页面。我所做的就是将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);
}