增加加密

This commit is contained in:
2026-05-04 21:17:42 +08:00
parent 03301d5b45
commit 90908cf018
5 changed files with 266 additions and 17 deletions
+57
View File
@@ -52,6 +52,29 @@ static uint32_t pkcs7_pad(uint8_t* data, uint32_t data_len, uint32_t buffer_size
return data_len + padding_len;
}
static uint32_t pkcs7_unpad(uint8_t* data, uint32_t data_len)
{
uint8_t padding_len;
uint32_t i;
if (data_len == 0) {
return 0;
}
padding_len = data[data_len - 1];
if (padding_len < 1 || padding_len > 16 || padding_len > data_len) {
return data_len;
}
for (i = data_len - padding_len; i < data_len; i++) {
if (data[i] != padding_len) {
return data_len;
}
}
return data_len - padding_len;
}
uint32_t Crypto_EncryptJSON(const char* json_data, char* encrypted_output)
{
uint32_t json_len = strlen(json_data);
@@ -97,3 +120,37 @@ uint32_t Crypto_EncryptJSON(const char* json_data, char* encrypted_output)
return encoded_len;
}
uint32_t Crypto_DecryptJSON(const char* encrypted_base64, char* plain_output, uint32_t output_size)
{
uint32_t encrypted_len;
uint32_t binary_len;
uint32_t plain_len;
uint8_t buffer[768];
struct AES_ctx ctx;
if (encrypted_base64 == NULL || plain_output == NULL || output_size == 0) {
return 0;
}
encrypted_len = strlen(encrypted_base64);
if (encrypted_len == 0 || encrypted_len > BASE64_ENCODE_SIZE(sizeof(buffer))) {
return 0;
}
binary_len = base64_decode(encrypted_base64, encrypted_len, buffer);
if (binary_len == 0 || (binary_len % 16) != 0 || binary_len >= sizeof(buffer)) {
return 0;
}
AES_init_ctx_iv(&ctx, AES_KEY, AES_IV);
AES_CBC_decrypt_buffer(&ctx, buffer, binary_len);
plain_len = pkcs7_unpad(buffer, binary_len);
if (plain_len >= output_size) {
return 0;
}
memcpy(plain_output, buffer, plain_len);
plain_output[plain_len] = '\0';
return plain_len;
}