Разница между code1 и code2
Код 1
uint8_t ucAESKey_BASE64[] = "oFqTg0a0VrjiVU76M1WRVw==";
uint8_t *pucAESKey_BASE64;
pucAESKey_BASE64 = ucAESKey_BASE64;
код 2
uint8_t *pucAESKey_BASE64 = "oFqTg0a0VrjiVU76M1WRVw==";
Я использую mbedtls_base64_decode() для декодирования строки base64, API mbedTLS.
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
и это правильно. Зачем?
1 ответ
С момента ввода mbedtls_base64_decode()
является строкой base64, можно использовать strlen, так как мы не ожидаем нулевой символ во входных данных. Я попытался воспроизвести вашу проблему, но оба входа генерируют один и тот же результат, поэтому я предполагаю, что другие ваши входные данные отличаются, как предполагает @nm. Я пробовал следующее:
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;
}