如何使用C加密和解密文本?

时间:2012-12-01 11:40:53

标签: c encryption

我尝试编写简单的应用程序来获取字符串并对其进行加密。 在我想通过使用解密算法获得前一个字符串之后。

AES加密/解密将非常好

这似乎是基本的,但大多数示例用其他语言写但不是C.我没有找到任何合适的例子来做到这一点。请帮忙。

任何和所有建议都将不胜感激。 : - )

2 个答案:

答案 0 :(得分:2)

您需要以下库:

   libc.lib
  euser.lib
  libcrypto.lib

此外,您还需要从http://www.developer.nokia.com/info/sw.nokia.com/id/91d89929-fb8c-4d66-bea0-227e42df9053/Open_C_SDK_Plug-In.html

安装openC插件

以下是带有解释注释的源代码:

#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用OpenSSL进行网络安全(google it你很容易找到这个的pdf .. )阅读第6章,该章节特定于使用EVP API的对称密码。这有助于我实际理解使用EVP的各种功能和结构背后的原因。

如果您想深入了解Openssl加密库,我建议您从openssl网站(您机器上安装的版本)下载代码,然后查看EVP和aeh api实现的实现。

答案 1 :(得分:0)

Rot-13开始,从there;)

开始