【发布时间】: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==";
-
显示声明以及
ucAESKey和olen的初始化方式。 -
通常是using
sizeofwith pointers 的问题,期望它返回与strlen相同的结果。ucAESKey在这两种情况下的初始化方式是否相同? -
您所描述的事情在现实中发生的可能性很小。请出示minimal reproducible example。