代码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 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
这是正确的。 为什么呢?
答案 0 :(得分:0)
由于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;
}