首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Crypto++输出数据长度

Crypto++输出数据长度
EN

Stack Overflow用户
提问于 2016-06-07 17:01:07
回答 1查看 688关注 0票数 5

我正在尝试使用Crypto++ libary中的AES加密:

代码语言:javascript
复制
CBC_Mode<AES>::Encryption e;

我有一个需要加密的二进制数据块。这个类似乎为此提供了一个名为ProcessData的方法:

代码语言:javascript
复制
virtual void ProcessData(byte *outString, const byte *inString, size_t length);

看起来最后一个参数是输入数据的大小。不清楚的是为什么该方法不返回加密数据的大小。是否假定输出数据块的大小与输入数据块的长度完全相同?即使输入数据的大小仅为一个字节,这也有效吗?致以问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-07 21:02:33

虚拟空ProcessData(字节*输出字符串,字节*inString,size_t长度); 看起来最后一个参数是输入数据的大小。不清楚的是为什么该方法不返回加密数据的大小.

ProcessData是所有块密码(但不是流密码或其他类型的对象)的工作马。还请参阅Crypto++手册和密码lib.h文件引用cryptlib.h被描述为“向该库提供统一接口的抽象基类”。

ProcessData对块大小的数据进行操作.所以INSIZE等于OUTSIZE等于BLOCKSIZE。请注意,这里没有INSIZEOUTSIZE --我使用它们进行讨论。每个分组密码都将为BLOCKSIZE提供一个常数。将有一个AES::BLOCKSIZEDES_EDE::BLOCKSIZE等。

通常,您不直接使用ProcessData。您可以直接使用它,但您将负责所有相关的详细信息(更多关于下面的细节)。

通常您使用的是StreamTransformationFilter,但这并不是显而易见的原因。StreamTransformationFilter根据需要提供输入缓冲、输出缓冲和填充。它在Init-更新-最终上对wiki进行了简要的讨论。

下面是从CBC模式 wiki上的Crypto++示例中看到的实际情况:

代码语言:javascript
复制
try
{
    cout << "plain text: " << plain << endl;

    CBC_Mode< AES >::Encryption e;
    e.SetKeyWithIV( key, key.size(), iv );

    // The StreamTransformationFilter adds padding
    //  as required. ECB and CBC Mode must be padded
    //  to the block size of the cipher.
    StringSource ss( plain, true, 
        new StreamTransformationFilter( e,
            new StringSink( cipher )
        ) // StreamTransformationFilter      
    ); // StringSource
}
catch( const CryptoPP::Exception& e )
{
    cerr << e.what() << endl;
    exit(1);
}

在上面的文章中,CBC_modeStreamTransformationFilter一起为您提供了所需的结果。CBC_mode调用ProcessData并处理密码链的详细信息。StreamTransformationFilter按其首选大小输入纯文本。如果没有足够的纯文本,那么StreamTransformationFilter会在输入时缓冲它。如果没有输出缓冲区,那么StreamTransformationFilter也会对密码文本进行缓冲。

StreamTransformationFilter还将根据需要应用填充。有一个默认的填充,但您可以覆盖它。StreamTransformationFilter知道要应用什么填充,因为它询问是否需要填充模式(CBC_mode)以及填充应该是什么。

..。是否假定输出数据块的大小与输入数据块的长度完全相同?即使输入数据的大小仅为一个字节,这也有效吗?

这就是StreamTransformationFilter符合方程的地方。

一定要查看wiki上的Init-更新-最终。如果您习惯于Java或OpenSSL编程,它应该会为您提供胶水。它应该会帮助你“让它点击”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37685190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档