c - 如何使用C语言加密和解密文本?

标签 c encryption

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

AES加密/解密会很不错

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

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

最佳答案

您将需要以下库:

   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 实现的实现。

关于c - 如何使用C语言加密和解密文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659079/

相关文章:

您可以使用 NASM 向 Linux 终端发送 bash 命令吗

C - 按回车键退出循环

android - 如何使用 NDK 为 Android 编译现有的 C 程序?

c - 共享内存的重新分配

security - 基于 token 的身份验证优势?

ssl - openssl参数和 key 生成的基本使用

javascript - 如何使 javascript 函数成为 html 属性?

java - java中AES256加密的问题

c# - 与 RijndaelManaged 加密的行为不一致

C: GDB: 终端显示逐行搜索内置函数