int do_crypt(char *outfile)
{
unsigned char outbuf[];
int outlen, tmplen;
/* Bogus key and IV: we'd normally set these from
* another source.
*/
unsigned char key[] = {,,,,,,,,,,,,,,,};
unsigned char iv[] = {,,,,,,,};
char intext[] = "Some Crypto Text";
EVP_CIPHER_CTX *ctx;
FILE *out; ctx = EVP_CIPHER_CTX_new();
EVP_EncryptInit_ex(ctx, EVP_idea_cbc(), NULL, key, iv); if(!EVP_EncryptUpdate(ctx, outbuf, &outlen, intext, strlen(intext)))
{
/* Error */
return ;
}
/* Buffer passed to EVP_EncryptFinal() must be after data just
* encrypted to avoid overwriting it.
*/
if(!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen))
{
/* Error */
return ;
}
outlen += tmplen;
EVP_CIPHER_CTX_free(ctx);
/* Need binary mode for fopen because encrypted data is
* binary data. Also cannot use strlen() on it because
* it won't be null terminated and may contain embedded
* nulls.
*/
out = fopen(outfile, "wb");
fwrite(outbuf, , outlen, out);
fclose(out);
return ;
}
  int do_crypt(FILE *in, FILE *out, int do_encrypt)
{
/* Allow enough space in output buffer for additional block */
unsigned char inbuf[], outbuf[ + EVP_MAX_BLOCK_LENGTH];
int inlen, outlen;
EVP_CIPHER_CTX *ctx;
/* Bogus key and IV: we'd normally set these from
* another source.
*/
unsigned char key[] = "0123456789abcdeF";
unsigned char iv[] = ""; /* Don't set key or IV right away; we want to check lengths */
ctx = EVP_CIPHER_CTX_new();
EVP_CipherInit_ex(&ctx, EVP_aes_128_cbc(), NULL, NULL, NULL,
do_encrypt);
OPENSSL_assert(EVP_CIPHER_CTX_key_length(ctx) == );
OPENSSL_assert(EVP_CIPHER_CTX_iv_length(ctx) == ); /* Now we can set key and IV */
EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, do_encrypt); for(;;)
{
inlen = fread(inbuf, , , in);
if (inlen <= ) break;
if(!EVP_CipherUpdate(ctx, outbuf, &outlen, inbuf, inlen))
{
/* Error */
EVP_CIPHER_CTX_free(ctx);
return ;
}
fwrite(outbuf, , outlen, out);
}
if(!EVP_CipherFinal_ex(ctx, outbuf, &outlen))
{
/* Error */
EVP_CIPHER_CTX_free(ctx);
return ;
}
fwrite(outbuf, , outlen, out); EVP_CIPHER_CTX_free(ctx);
return ;
}

// openssl.org/docs/man1.1.0/man3/EVP_EncryptInit_ex.html

最新文章

  1. react+redux官方实例TODO从最简单的入门(4)-- 改
  2. PHP的数组排序函数
  3. bzoj2503&amp;poj3387[NEERC2006]IdealFrame
  4. PHP+jQuery 注册模块的改进之三:使用 Smarty3
  5. oracle SGA详解
  6. 通过NuGet获取sqlite对应的.net的dll
  7. WebSocket 浅析
  8. 【nodejs】jade模板入门
  9. HDU 5521 Meeting (最短路,dijstra)
  10. jquery弹出层拖拽
  11. 函数:atexit
  12. hibernate中一种导致a different object with the same identifier value was already associated with the session错误方式及解决方法
  13. Check the string CodeForces - 960A
  14. SpringBoot系列: RestTemplate 快速入门
  15. Android 框架 Afinal使用
  16. drf的组件和解析器
  17. nginx 反向代理案例
  18. Unity3D架构设计NavMesh寻路
  19. linux 的常用命令---------第九阶段
  20. xamarin.android 实现 Activity 底部弹出对话框菜单

热门文章

  1. 算法(第4版)Robert Sedgewick 刷题 第一章(1)
  2. 吴裕雄--天生自然 JAVASCRIPT开发学习:对象
  3. spring boot rest 接口集成 spring security(2) - JWT配置
  4. 可重入排他锁ReentrantLock源码浅析
  5. JAVA初学者——Hello,World!
  6. textField 基本属性
  7. Unity3d游戏代码保护
  8. go语言使用
  9. UML-迭代3-中级主题
  10. ubuntu下安装ant