【问题标题】:Parameter details of OpenSSL's AES_ctr128_encrypt()OpenSSL 的 AES_ctr128_encrypt() 的参数详细信息
【发布时间】:2016-11-10 08:38:36
【问题描述】:

我正在尝试了解 openSSL 加密库中以下函数的参数。

void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
    size_t length, const AES_KEY *key,
    unsigned char ivec[AES_BLOCK_SIZE],
    unsigned char ecount_buf[AES_BLOCK_SIZE],
    unsigned int *num);

通过解决here 给出的建议,我能够弄清楚:

*in - is the buffer in.
*out - is the buffer out.
length - is the the length of the *in buffer.
*key - is the private key.
ivec[0-7] - is the random IV
ivec[8-15] - is the counter thats incremented for every block that's encrypted.

我不确定ecount_bufnum 参数。

我看到调用返回后num 设置为length % AES_BLOCK_SIZE

任何指向ecount_buf 参数的指针?

【问题讨论】:

标签: c encryption openssl aes libcrypto


【解决方案1】:

如果你看一下取自here的实现代码:

/* The input encrypted as though 128bit counter mode is being
 * used.  The extra state information to record how much of the
 * 128bit block we have used is contained in *num, and the
 * encrypted counter is kept in ecount_buf.  Both *num and
 * ecount_buf must be initialised with zeros before the first
 * call to AES_ctr128_encrypt().
 */
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
    const unsigned long length, const AES_KEY *key,
    unsigned char counter[AES_BLOCK_SIZE],
    unsigned char ecount_buf[AES_BLOCK_SIZE],
    unsigned int *num) {

    unsigned int n;
    unsigned long l=length;

    assert(in && out && key && counter && num);
    assert(*num < AES_BLOCK_SIZE);

    n = *num;

    while (l--) {
        if (n == 0) {
            AES_encrypt(counter, ecount_buf, key);
            AES_ctr128_inc(counter);
        }
        *(out++) = *(in++) ^ ecount_buf[n];
        n = (n+1) % AES_BLOCK_SIZE;
    }

    *num=n;
}

你可以推断它是一个中间缓冲区,用于保存 encrypted counter。 num 以总块大小中使用的字节数的形式保存状态信息(以防我们为了链接额外数据而进行的后续调用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2011-01-31
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2018-06-27
    相关资源
    最近更新 更多