2

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

AES加密/解密会很不错

它看起来很基本,但大多数示例都是用其他语言而不是 C 语言编写的。我没有找到任何合适的示例来做到这一点。请帮忙。

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

4

2 回答 2

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 的这本书 Network Security with OpenSSL(谷歌它,您会很容易找到这本书的 pdf ..)阅读章节6,它特定于使用 EVP API 的对称密码。这有助于我真正理解使用 EVP 的各种功能和结构背后的原因。

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

于 2012-12-01T12:07:20.780 回答
0

从 即Rot-13开始,然后从那里开始工作;)

于 2012-12-01T12:06:24.087 回答