우리 모두는 mbedtls 라이브러리가 매우 가벼운 C 라이브러리라는 것을 알고 있습니다. 라이브러리를 사용하여 문자열을 암호화하고 싶습니다. 그래서 나는이 같은 기능을 가지고 :mbedtls를 사용하여 문자열을 암호화하는 방법은 무엇입니까?
aes_encrypt.h :
#ifndef AES_ENCRYPT_H
#define AES_ENCRYPT_H
#define BOOL int
#define TRUE 1
#define FALSE 0
extern const unsigned char key[16];
BOOL ENC_STR(unsigned char *plain, size_t plain_len,
unsigned char *cipher, size_t *cipher_len);
#endif
및 구현 :
unsigned char *plain = (unsigned char*)"hello world";
size_t plain_len = 12;
unsigned char cipher[128] = {0};
size_t cipher_len = -1;
printf("the encrypt result is:\t%d\n", ENC_STR(plain, plain_len, cipher, &cipher_len));
그리고 I :
const unsigned char KEY[16] = { 0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B,
0x0C, 0x0D, 0x0F, 0xA0 };
BOOL ENC_STR(unsigned char *plain, size_t plain_len, unsigned char *cipher, size_t *cipher_len)
{
BOOL ret = FALSE;
// Prepare the cipher context
const mbedtls_cipher_info_t *cipher_info;
mbedtls_cipher_context_t cipher_ctx;
mbedtls_cipher_init(&cipher_ctx);
if ((cipher_info = mbedtls_cipher_info_from_type(AES_PARM)) == NULL)
{
printf("Cipher Info ERR!\n");
ret = -1;
goto EXIT;
}
if ((ret = mbedtls_cipher_setup(&cipher_ctx, cipher_info)) != 0)
{
printf("Cipher Setup ERR!\n");
goto EXIT;
}
if ((ret = mbedtls_cipher_setkey(&cipher_ctx, KEY, cipher_info->key_bitlen, MBEDTLS_ENCRYPT)) != 0)
{
printf("Cipher SetKey ERR!\n");
goto EXIT;
}
// if ((ret = mbedtls_cipher_set_padding_mode(&cipher_ctx, 1)) != 0) {
// printf("Cipher SetPadding ERR!\n");
// goto EXIT;
// }
if ((ret = mbedtls_cipher_reset(&cipher_ctx)) != 0)
{
printf("Cipher Reset ERR!\n");
goto EXIT;
}
// encrypt
if ((ret = mbedtls_cipher_update(&cipher_ctx, plain, plain_len, cipher, cipher_len)) != 0) {
printf("Cipher Update ERR!\n");
goto EXIT;
}
EXIT:
if (ret != TRUE) {
char buf[1024] = {0};
mbedtls_strerror(ret, buf, 1024);
printf("Error Msg:\t%s\n", buf);
}
mbedtls_cipher_free(&cipher_ctx);
return ret;
}
내가 기능 울부 짖는 소리처럼 호출 다음과 같은 오류 메시지를 받으십시오 :
CIPHER - Decryption of block requires a full block
누구든지 나를 도와 주며 오류 메시지의 의미를 설명 할 수 있습니까? 감사.
는 당신이 암호화 원하는 것은 너무 짧은 것을 나타냅니다 선택하는 당신에게 달려 있습니다. 그것을 채 웁니다. – Yunnosch
그러나 doc (mbedtls 헤더 파일)은 기본 채우기가 pkcs7이라고 말했습니다. 수동으로 설정해야합니까? – Andy
Cipher.h에서 MBEDTLS_CIPHER_MODE_WITH_PADDING을 찾으십시오. –