【问题标题】:Difference between code1 and code2代码和代码2之间的区别
【发布时间】:2017-04-13 06:24:13
【问题描述】:

代码 1

uint8_t  ucAESKey_BASE64[] = "oFqTg0a0VrjiVU76M1WRVw==";
uint8_t *pucAESKey_BASE64;
pucAESKey_BASE64 = ucAESKey_BASE64;

代码 2

uint8_t *pucAESKey_BASE64 = "oFqTg0a0VrjiVU76M1WRVw==";

我使用mbedtls_base64_decode()解码base64字符串,mbedTLS的API。

int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
                   const unsigned char *src, size_t slen )

我的程序是这样的:

mbedtls_base64_decode(ucAESKey, sizeof(ucAESKey), &olen, 
                      pucAESKey_BASE64, strlen(pucAESKey_BASE64));

如果参数*src使用代码2,输出为

00 00 00 83 46 b4 56 b8 e2 55 4e fa 33 55 91 57

如果 *src 使用代码 1,则输出为

a0 5a 93 83 46 b4 56 b8 e2 55 4e fa 33 55 91 57

这是正确的。 为什么?

【问题讨论】:

  • 你为什么在不是const char *的缓冲区上使用strlen
  • 可能有问题,因为您将一个声明为数组而另一个声明为非数组:uint8_t ucAESKey_BASE64[] = "oFqTg0a0VrjiVU76M1WRVw=="; uint8_t *pucAESKey_BASE64 = "oFqTg0a0VrjiVU76M1WRVw==";应该是:uint8_t ucAESKey_BASE64 = "oFqTg0a0VrjiVU76M1WRVw=="; uint8_t *pucAESKey_BASE64 = "oFqTg0a0VrjiVU76M1WRVw==";
  • 显示声明以及ucAESKeyolen 的初始化方式。
  • 通常是using sizeof with pointers 的问题,期望它返回与strlen 相同的结果。 ucAESKey 在这两种情况下的初始化方式是否相同?
  • 您所描述的事情在现实中发生的可能性很小。请出示minimal reproducible example

标签: c mbedtls


【解决方案1】:

由于mbedtls_base64_decode() 的输入是base64 字符串,因此可以使用strlen,因为我们不希望输入中有任何空字符。 我已尝试重现您的问题,但两个输入生成相同的输出,因此我假设您的其他输入不同,如@n.m。建议。 我尝试了以下方法:

int main( int argc, char *argv[] )
{
    unsigned char ucAESKey[32] = { 0 };
    size_t olen = 32;
    size_t i;
#if 0
    uint8_t  ucAESKey_BASE64[] = "oFqTg0a0VrjiVU76M1WRVw==";
    uint8_t *pucAESKey_BASE64;
    pucAESKey_BASE64 = ucAESKey_BASE64;
#else
    uint8_t *pucAESKey_BASE64 = "oFqTg0a0VrjiVU76M1WRVw==";
#endif
    mbedtls_base64_decode(ucAESKey, sizeof(ucAESKey), &olen,
                   pucAESKey_BASE64, strlen(pucAESKey_BASE64));

    for (i = 0; i < olen; i++)
    {
        mbedtls_printf("0x%x ", ucAESKey[i]); 
    }
return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多