2013-07-17 21 views
2

如何能夠解密在python中使用AES加密的密文。如何在C中使用openssl解密密文?

Encrypt.py

使用這個我使用AES和關聯,與IV 和寫做密文,在一個文件file.txt的。

from Crypto.Cipher import AES 
import hashlib, os 
Plain = 'This is a string'    #String to Encrypt 
key = 'mysecretpassword'  
#key = hashlib.md5(key).digest()  #Key 
IV = 'InitializationVector' 
IV = hashlib.md5(IV).digest()   #Initialization Vector 
print len(IV) 
Obj1 = AES.new(key, AES.MODE_CBC, IV) 
Cipher = Obj1.encrypt(Plain)   #Cipher text 
File = open('file.txt','w') 
File.write(Cipher+IV)  #Concatenated the string and IV and 
          #wrote that to a file file.txt 
File.close() 

Decrypt.c

使用這個,現在我從file.txt的密文和IV。現在我怎麼能 解密密碼使用openssl或任何其他庫?

#include <stdio.h> 
#include <string.h> 
int main() 
{ 
    char filename[] = "file.txt"; 
    FILE *file = fopen (filename, "r"); 
    char key[] = "mysecretpassword"; 
    if (file != NULL) { 
    char line [1000]; 
    char *p = line; 
    char *array = line; 
    while(fgets(line,sizeof line,file)!= NULL) { 
     fprintf(stdout,"%s\n",line); 
     char otherString[strlen(line)-15]; 
     strncpy(otherString, p, strlen(line)-16); 
     otherString[strlen(otherString)-1] = '\0'; 
     printf("%s\n", otherString);//Here I got the Encrypted string 
     array=array+(strlen(array)-16); 
     printf("%s\n",array);//Here I got the IV 
     //Here how to decrypt the Cipher text using "IV" and "key" 
    } 
    fclose(file); 
    } 
    else { 
    perror(filename); 
    } 
    return 0; 
} 

真的,我是一個新手。請原諒我的問題中的錯誤,請隨時來幫助我,這將是你最善良的。提前致謝。

回答

1
#include "openssl/aes.h" 

    char buffer[1000]; 
    AES_KEY dec_key; 
    AES_set_decrypt_key(key, 128, &dec_key); 
    AES_cbc_encrypt(otherString, buffer, strlen(line) - 16, 
        &dec_key, array, AES_DECRYPT); 
//AES_KEY dec_key; 
//AES_set_decrypt_key(key, keySize, &dec_key); 
//AES_cbc_encrypt(ciphertext, result, textLen, &dec_key, iv, AES_DECRYPT); 

這對我有用。 128是16字節密鑰的位。

但我相信,你也有錯誤在-1 -15 -16字符串長度的地方。 while循環是可以改變的,以解決問題這一部分:

int strLen = strlen(line) - 16; 

    char otherString[strLen + 1]; 
    strncpy(otherString, p, strLen); 
    otherString[strLen] = '\0'; 

    array = array + strLen; 

這裏也是不錯的AES CBC加密/解密example codeyour working code

相關問題