Iphone OpenSSL AES256 cbc加密

Iphone OpenSSL AES256 cbc加密,iphone,openssl,aes,Iphone,Openssl,Aes,几天来,我试图在互联网上找到一个合适的例子,但没有成功。我尝试用密钥加密简单字符串(Hello World),然后解密结果。 但是,解密结果与原始文本无关。谁能给我指个方向吗 我制定的准则是: AES_KEY aes_decryptKey; AES_KEY aes_encryptKey; const unsigned char mykey[] = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xa

几天来,我试图在互联网上找到一个合适的例子,但没有成功。我尝试用密钥加密简单字符串(Hello World),然后解密结果。 但是,解密结果与原始文本无关。谁能给我指个方向吗

我制定的准则是:

AES_KEY aes_decryptKey;
AES_KEY aes_encryptKey;

const unsigned char mykey[] = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa};
unsigned char encrypted ;
unsigned char iv[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};    
unsigned char decrypted;

AES_set_encrypt_key(mykey, 256, &aes_encryptKey);
AES_set_decrypt_key(mykey, 256, &aes_decryptKey);

const unsigned char original[]  = {0x48,0x65,0x6c,0x6c,0x6f,0x2c,0x77,0x6f,0x72,0x6c,0x64,0x21};

AES_cbc_encrypt(original, &encrypted, sizeof(original), &aes_encryptKey, iv, 0);

AES_decrypt( &encrypted, &decrypted, &aes_decryptKey);

NSLog(@"ORIGINAL: \"%s\"\n",original);
NSLog(@"ENCRYPTED: \"%s\"\n",&encrypted);
NSLog(@"DECRYPTED: \"%s\"\n",&decrypted);
您解密了两次——AES_cbc_encrypt的最后一个0参数应该是1或
AES_encrypt

此外,您正在覆盖加密和解密字符,这些字符应该是足够大的数组,以容纳原始字符的加密大小。而不是:

unsigned char encrypted;
...
AES_cbc_encrypt(original, &encrypted, ...
使用类似于:

unsigned char encrypted[32];
...
AES_cbc_encrypt(original, encrypted, ...
unsigned char decrypted[32];
....
AES_decrypt(encrypted, decrypted, &aes_decryptKey);
还有一些类似:

unsigned char encrypted[32];
...
AES_cbc_encrypt(original, encrypted, ...
unsigned char decrypted[32];
....
AES_decrypt(encrypted, decrypted, &aes_decryptKey);

查看此链接:。我还不能保证这一切——等我有时间再回来编辑我的答案。

吉姆,谢谢你的帮助

似乎我必须提出一个问题才能找到答案。 经过几天的努力,我得出了以下结论:

    unsigned char inbuf[1024]="Hello,world!";
unsigned char encbuf[1024];

unsigned char key32[] = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa};
unsigned char deckey32[] = {0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa}
;
unsigned char iv[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};    
unsigned char deciv[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};    

AES_KEY aeskey;
AES_KEY aesdeckey;

//Now enrypt
memset(encbuf, 0, sizeof(encbuf));
AES_set_encrypt_key(key32, 32*8, &aeskey);
AES_cbc_encrypt(inbuf, encbuf, 16, &aeskey, iv, AES_ENCRYPT);

//Now decrypt
unsigned char decbuf[1024];
memset(decbuf, 0, sizeof(decbuf));

AES_set_decrypt_key(deckey32, 32*8, &aesdeckey);
AES_cbc_encrypt(encbuf, decbuf, 16, &aesdeckey, deciv, AES_DECRYPT);


//Display the results
NSLog(@"ORIGINAL: \"%s\"\n", inbuf);
NSLog(@"ENCRYPTED: \"%s\"\n", encbuf);
NSLog(@"DECRYPTED: \"%s\"\n", decbuf);

return;
这些人的信用(在吉姆之后):

密钥是使用AES_cbc_encrypt进行解密