我尝试编写简单的应用程序来获取字符串并对其进行加密。在我想通过使用解密算法获取以前的字符串之后。
AES加密/解密会很不错
它看起来很基本,但大多数示例都是用其他语言而不是 C 语言编写的。我没有找到任何合适的示例来做到这一点。请帮忙。
任何和所有的建议将不胜感激。:-)
我尝试编写简单的应用程序来获取字符串并对其进行加密。在我想通过使用解密算法获取以前的字符串之后。
AES加密/解密会很不错
它看起来很基本,但大多数示例都是用其他语言而不是 C 语言编写的。我没有找到任何合适的示例来做到这一点。请帮忙。
任何和所有的建议将不胜感激。:-)
您将需要以下库:
libc.lib
euser.lib
libcrypto.lib
这是带有解释注释的源代码:
#include <stddef.h>
#include <openssl/rc4.h>
#include <openssl/md5.h>
//#include<filelogger.h>
void openc_encrypt(int len, unsigned char* in, unsigned char* crypted, unsigned char* password, int passlen)
{
unsigned char digest[MD5_DIGEST_LENGTH];
RC4_KEY key;
MD5(password, passlen, digest);
RC4_set_key(&key, MD5_DIGEST_LENGTH, digest);
RC4(&key, len, in, crypted);
}
void openc_decrypt(int len, unsigned char* in, unsigned char* decrypted, unsigned char* password, int passlen)
{
unsigned char digest[MD5_DIGEST_LENGTH];
RC4_KEY key;
MD5(password, passlen, digest);
RC4_set_key(&key, MD5_DIGEST_LENGTH, digest);
RC4(&key, len, in, decrypted);
}
/////////////////////////////////////////////////////////////////////////////////////
const TInt KMaxTextLen = 100;
_LIT8(KExampleText, "Encrypt this text!");
_LIT8(KPassWord, "secret");
void doExampleL()
{
TBuf8<KMaxTextLen> buffer(KExampleText);
HBufC8* password = KPassWord().AllocLC();
HBufC8* crypted = HBufC8::NewLC(buffer.Size());
TPtr8 cryptedPtr = crypted->Des();
cryptedPtr.SetLength(buffer.Size());
openc_encrypt(buffer.Size(),
(unsigned char*)buffer.Ptr(),
(unsigned char*)cryptedPtr.Ptr(),
(unsigned char*)password->Ptr(),
password->Size());
//LOGDES16(buffer); //Encrypt this text!
//LOGDES8(*crypted) ; //Ór›Â Û¦ }ÖŠ4 b q
HBufC8* decrypted = HBufC8::NewLC(buffer.Size());
TPtr8 decryptedPtr = decrypted->Des();
buffer.Copy(cryptedPtr);
decryptedPtr.SetLength(buffer.Size());
openc_decrypt(buffer.Size(),
(unsigned char*)buffer.Ptr(),
(unsigned char*)decryptedPtr.Ptr(),
(unsigned char*)password->Ptr(),
password->Size());
//LOGDES16(buffer); //Ór›Â Û¦ }ÖŠ4 b q
//LOGDES8(*decrypted) ; //Encrypt this text!
CleanupStack::PopAndDestroy(3); //decrypted, crypted, password
}
此示例中的文本已使用密码短语加密,然后使用示例函数 openc_encrypt() 和 openc_decrypt() 使用相同的密码短语解密。
编辑
AES 加密
(信用去:abhi)
对于AES加密请参考这个例子:http ://saju.net.in/code/misc/openssl_aes.c.txt
代码足够详细,并带有注释,如果您仍然需要对 API 本身进行更多解释,我建议您查看 Viega/Messier/Chandra 的这本书 Network Security with OpenSSL(谷歌它,您会很容易找到这本书的 pdf ..)阅读章节6,它特定于使用 EVP API 的对称密码。这有助于我真正理解使用 EVP 的各种功能和结构背后的原因。
如果你想深入研究 Openssl 加密库,我建议从 openssl 网站(安装在你的机器上的版本)下载代码,然后查看 EVP 和 aeh api 的实现。