【发布时间】:2022-01-18 05:33:36
【问题描述】:
我正在尝试使用 mbedtls/aes.h 扩展加密消息
这是我的代码:
void encrypt(char * plainText, char * key, unsigned char * outputBuffer){
mbedtls_aes_context aes;
mbedtls_aes_init( &aes );
mbedtls_aes_setkey_enc( &aes, (const unsigned char*) key, strlen(key) * 8 );
mbedtls_aes_crypt_ecb( &aes, MBEDTLS_AES_ENCRYPT, (const unsigned char*)plainText, outputBuffer);
mbedtls_aes_free( &aes );
}
void decrypt(unsigned char * chipherText, char * key, unsigned char * outputBuffer){
mbedtls_aes_context aes;
mbedtls_aes_init( &aes );
mbedtls_aes_setkey_dec( &aes, (const unsigned char*) key, strlen(key) * 8 );
mbedtls_aes_crypt_ecb(&aes, MBEDTLS_AES_DECRYPT, (const unsigned char*)chipherText, outputBuffer);
mbedtls_aes_free( &aes );
}
void test() {
char * key = "Yq3t6w9z$C&F)J@M";
char *plainText = "Message Message Message Message Message Message Message Message Message Message Message ";
unsigned char cipherTextOutput[16];
unsigned char decipheredTextOutput[16];
encrypt(plainText, key, cipherTextOutput);
decrypt(cipherTextOutput, key, decipheredTextOutput);
Serial.println("\nPlain text:");
Serial.println(plainText);
Serial.println("\nCiphered text:");
for (int i = 0; i < 16; i++) {
char str[3];
sprintf(str, "%02x", (int)cipherTextOutput[i]);
Serial.print(str);
}
Serial.println("\n\nDeciphered text:");
for (int i = 0; i < 16; i++) {
Serial.print((char)decipheredTextOutput[i]);
}
}
这是输出:
纯文本:
Message Message Message Message Message Message Message Message Message Message Message
密文:
cb91d2da0d1be520239651f63b259be8
解密文本:
Message Message
我想加密更大的文本,如何扩展缓冲区?
【问题讨论】:
-
您的硬编码长度为 16。
-
我已经尝试更改这些值,但更改后我得到了一个破译的结果,例如“␀␟�?`␟�?
-
mbedtls_aes_crypt_ecb(..) 只加密一个块(16 字节)。您需要遍历您的消息并一次加密 16 个字节...
标签: c++ c encryption aes