Chuỗi được mã hóa với các thuộc tính sau (sử dụng C#):
myAes.Mode = CipherMode.CBC
myAes.KeySize = 128
myAes.Padding = PaddingMode.PKCS7
myAes.BlockSize = 128
myAes.FeedbackSize = 128
Mã: 5753B8AA97BE5B5D9584864DF3134E64
Đây là chức năng giải mã của tôi:
int AESdecrypt(ký tự không dấu *bản mã, size_t ciphertext_len, khóa char *không dấu, ký tự không dấu *iv, ký tự không dấu *bản rõ)
{
EVP_CIPHER_CTX *ctx;
int len;
int retErrors=1;
int bản rõ_len;
/* Tạo và khởi tạo ngữ cảnh */
if(!(ctx = EVP_CIPHER_CTX_new()))
{
LOGF_TRACE("\t Lỗi trong EVP_CIPHER_CTX_new");
EVP_CIPHER_CTX_free(ctx);
trả về 0;
}
/*
* Khởi tạo hoạt động giải mã. QUAN TRỌNG - đảm bảo bạn sử dụng khóa
* và kích thước IV phù hợp với mật mã của bạn
* Trong ví dụ này, chúng tôi đang sử dụng AES 256 bit (tức là khóa 256 bit). Các
* Kích thước IV cho các chế độ *hầu hết* giống với kích thước khối. Đối với AES này
* là 128 bit
*/
if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv))
{
LOGF_TRACE("\t Lỗi trong EVP_DecryptInit_ex");
EVP_CIPHER_CTX_free(ctx);
trả về 0;
}
/*
* Cung cấp tin nhắn cần được giải mã và nhận đầu ra văn bản gốc.
* EVP_DecryptUpdate có thể được gọi nhiều lần nếu cần.
*/
if(1 != EVP_DecryptUpdate(ctx, bản rõ, &len, bản mã, bản mã_len))
{
LOGF_TRACE("\t EVP_DecryptUpdate");
EVP_CIPHER_CTX_free(ctx);
trả về 0;
}
bản rõ_len = len;
/*
* Hoàn thiện việc giải mã. Các byte văn bản rõ hơn nữa có thể được viết tại
* sân khấu này.
*/
if(1 != EVP_DecryptFinal_ex(ctx, bản rõ + len, &len))
{
LOGF_TRACE("\t EVP_DecryptFinal_ex");
EVP_CIPHER_CTX_free(ctx);
trả về 0;
}
bản rõ_len += len;
/* Dọn dẹp */
EVP_CIPHER_CTX_free(ctx);
trả lại bản rõ_len;
}
Tuy nhiên, khi tôi cố gắng giải mã, chuỗi kết quả có thêm 16 (0x10) byte: (Đã xóa một số ký tự vì lý do bảo mật).
0000 - 2e 3c 81 6b ed 2e 6b 59-fe 38 ae b7 56 11 1f c2 .<.k..kY.8..V...
0010 - 45 53 54 41 20 45 53 20-55 4e 41 20 50 52 55 45 ESTA ES UNA PRUUE
0020 - 42 41 20 44 45 20 43 49-46 52 41 44 4f 20 41 45 BA DE CIFRADO AE
0030 - 53 20 50 41 52 41 20 45-54 48 45 52 4e 45 54 20 S PARA ETHERNET
0040 - XX XX XX XX XX XX XX-XX XX XX XXXXXXXX
Tôi muốn biết liệu điều này có bình thường không và tôi chỉ nên xóa 16 byte đầu tiên hoặc làm cách nào để tránh có thêm các byte đó (tôi cảm thấy không bình thường).
Điều này có liên quan gì đến IV mà họ đang sử dụng để mã hóa không?
Cảm ơn.