[英]Decrypt string via OpenSSL
我的目標是解密 base64 編碼字符串。
運行該命令完全有效:
openssl enc -base64 -d -aes-128-cbc -iv '{iv}' -K {hex_key} <<< {hex_enc_password}
我想通過 C api 做同樣的事情。 我知道在 stackoverflow 上有很多類似的問題,但似乎沒有什么對我有用,所以我懇請您不要將其標記為重復。
信息:
hex_enc_password是 base64 編碼的
hex_key是字節串形式的字符串(通過 hexlify())(例如:0x1a,0xc4 -> "1ac4")
我目前的代碼:
char* key = "lbzA54tAAg3E/jPxiJc34e==";
unsigned char *hex_key = hexlify(key);
char encrypted[] = {0x3d,0xd2,0x02,0xc3,0xae,0x1e,0xf5,0x7e,0x33,0xc3,0x1d,0x7b,0x1e,0x48,0x73,0x84};
size_t output_length;
unsigned char *hex_enc_password = base64_encode(encrypted, sizeof(encrypted), &output_length);
decrypt(hex_enc_password, strlen(hex_enc_password),hex_key, iv);
char* decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *iv ) {
int outLen1 = 0; int outLen2 = 0;
unsigned char *outdata = malloc(ciphertext_len+1);
bzero(outdata, ciphertext_len+1);
//setup decryption
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
EVP_DecryptInit(ctx,EVP_aes_128_cbc(),key,iv); //returns 1
EVP_DecryptUpdate(ctx,outdata,&outLen1,ciphertext,ciphertext_len); //returns 1
EVP_DecryptFinal(ctx,outdata + outLen1,&outLen2); //returns 0
return outdata;
}
有什么想法可能是錯的嗎?
我終於讓它工作了。 如上面評論中所述,base64 中不應編碼任何內容。 使用-base64
調用命令行二進制文件只會讓 openssl 在繼續之前對其進行解碼。 hexlifying也是如此,跳過它。
除此之外的所有內容都應與上述相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.