最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言使用openSSL庫DES模塊實現(xiàn)加密功能詳解

 更新時間:2017年05月22日 11:48:02   作者:erlang_hell  
這篇文章主要介紹了C語言使用openSSL庫DES模塊實現(xiàn)加密功能,簡單講解了DES加密的相關(guān)概念,并結(jié)合實例形式分析了DES加密的具體實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了C語言使用openSSL庫DES模塊實現(xiàn)加密功能。分享給大家供大家參考,具體如下:

在通訊過程中為了防止普通的玩家截取協(xié)議修改內(nèi)容并且發(fā)送,我們是有必要對協(xié)議進行加密的。當(dāng)前這樣的加密手段都已經(jīng)是變成世界里面的基礎(chǔ)設(shè)施了。我們只需要將其引入到工程中就好。本文將會基于OpenSSL來編寫一個加密、解密的實例。時下流行的加密解密方式有DES/AES。先我們來聊聊歷史吧。

歷史介紹

DES(Data Encryption Standard)

DES一度是電子數(shù)據(jù)對稱加密的主導(dǎo)者。他影響了現(xiàn)代加密學(xué)。最早是在IBM于1970年基于更早的Horst Feistel的設(shè)計而開發(fā)出來的,算法應(yīng)美國國家標(biāo)準(zhǔn)局(NBSNational_Bureau_of_Standards) National Bureau of Standards)代理人的邀請加入對美國政府敏感電子數(shù)據(jù)加密的候選方案。在1976年,經(jīng)過和美國國家安全局(NSA)磋商,NBS最終選擇了一個精簡版本在1977年發(fā)布。

如今在很多應(yīng)用的加密還是會考慮使用DES。這個主要由于56-byte key size

AES(Advanced Encryption Standard)

是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過五年的甄選流程,高級加密標(biāo)準(zhǔn)由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。2006年,高級加密標(biāo)準(zhǔn)已然成為對稱密鑰加密中最流行的算法之一。

編譯openssl

wget ftp://ftp.openssl.org/source/openssl-1.0.0c.tar.gz
tar -zxf openssl-1.0.0c.tar.gz
cd openssl-1.0.0c/
./config --prefix=/usr/local --openssldir=/usr/local/ssl
make && make install
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make && make install

代碼示例

DES

include文件

#include <openssl/des.h>
#include <openssl/pkcs7.h>
#ifndef uchar
#define uchar unsigned char
#endif

引入lib

libeay32.lib    // for windows
-lcrypto      // for linux

加密代碼

int encrypt_data(const char *_key, const char *_vt,char *_raw_ptr,size_t _raw_size
  , char **_dst_buf, size_t *_dst_size) {
  DES_key_schedule schedule;
  uchar key1[8];
  des_cblock *iv3;
  int pading ;
  size_t i, vt_size ;
  char *mid_buf;
  memset( key1,0,8);
  memcpy( key1, _key, 8 );
  DES_set_key_unchecked( (const_DES_cblock*)&key1, &schedule);
  vt_size = strlen( _vt );
  iv3 = (des_cblock *)malloc(vt_size * sizeof(uchar));
  memcpy(iv3,_vt,vt_size);
  pading = 8 - (_raw_size % 8);
  *_dst_size = _raw_size + pading;
  mid_buf = (char*)malloc(*_dst_size);
  memcpy(mid_buf,_raw_ptr,_raw_size );
  for (i = _raw_size ; i < *_dst_size; i++ ) {
    mid_buf[i] = pading;
  }
  *_dst_buf = (char*)malloc(*_dst_size);
  DES_cbc_encrypt( (const uchar*)mid_buf, (unsigned char *)*_dst_buf, *_dst_size, &schedule, iv3, DES_ENCRYPT);
  free(iv3);
  free(mid_buf);
  return 1;
}

解密代碼

int decrypt_data(const char *_key, const char *_vt,char *_raw_ptr,size_t _raw_size
    , char **_dst_buf, size_t *_dst_size ) {
  DES_key_schedule schedule;
  uchar key1[8];
  des_cblock *iv3;
  int pading ;
  size_t i, vt_size ;
  char *mid_buf;
  memset( key1,0,8);
  memcpy( key1, _key, 8 );
  DES_set_key_unchecked( (const_DES_cblock*)&key1, &schedule);
  vt_size = strlen( _vt );
  iv3 = (des_cblock *)malloc(vt_size * sizeof(uchar));
  memcpy(iv3,_vt,vt_size);
  *_dst_buf = (char*)malloc(_raw_size);
  DES_cbc_encrypt( (const uchar*)_raw_ptr, *_dst_buf, _raw_size, &schedule, iv3, DES_DECRYPT);
  free(iv3);
  return 1;
}

編譯運行

scons腳本SConstruct

import glob
env = Environment()
env["CPPPATH"] = [ '/home/abel/lib/openssl-1.0.2f/include' ]
env['LIBPATH'] = [ '/home/abel/lib/openssl-1.0.2f' ]
env['CPPDEFINES'] = ['LINUX', '_DEBUG' ]
env['CCFLAGS'] = '-g -std=gnu99'
env['LIBS'] = [ 'm', 'crypto', 'dl', 'profiler' ]
env.Program( target = "./test_des", source = ( glob.glob( './*.c' ) ) )

測試代碼

int test_fun( int agrn, char *agrv[] ) {
  char *_key = "jkl;!@#$";
  char *_vt = "asdf!@#$";
  char *_raw_ptr ;
  size_t _raw_size;
  char *_dst_buf;
  size_t _dst_size;
  char *_final_buf;
  size_t _final_size;
  _raw_ptr = (char *)malloc(sizeof(char)*5);
  memcpy(_raw_ptr, "hello", 5);
  _raw_size = 5;
  encrypt_data(_key, _vt,_raw_ptr,_raw_size
      , &_dst_buf, &_dst_size) ;
  decrypt_data(_key,_vt, _dst_buf, _dst_size, &_final_buf, &_final_size );
  printf( "final: %s\n", _final_buf );
  free(_dst_buf);
  return 0;
}

PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:

文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode

MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password

在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

希望本文所述對大家C語言程序設(shè)計有所幫助。

相關(guān)文章

  • VS2022調(diào)試通過??禂z像頭煙火識別SDK的實現(xiàn)

    VS2022調(diào)試通過海康攝像頭煙火識別SDK的實現(xiàn)

    本文主要介紹了VS2022調(diào)試通過海康攝像頭煙火識別SDK的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言代碼實現(xiàn)學(xué)生成績管理系統(tǒng)

    C語言代碼實現(xiàn)學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言代碼實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 華為云CodeArts?IDE?Online快速入門和使用

    華為云CodeArts?IDE?Online快速入門和使用

    華為云CodeArts?IDE?Online服務(wù),提供了可隨時隨地編碼的云上開發(fā)環(huán)境,同時具備開放的生態(tài)和獨立插件市場,本文主要介紹了華為云CodeArts?IDE?Online快速入門和使用,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • C語言實現(xiàn)密碼本

    C語言實現(xiàn)密碼本

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)密碼本,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++實現(xiàn)讀取圖片長度和寬度

    C++實現(xiàn)讀取圖片長度和寬度

    這篇文章主要介紹了C++實現(xiàn)讀取圖片長度和寬度,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • C++模擬實現(xiàn)vector的示例代碼

    C++模擬實現(xiàn)vector的示例代碼

    大家在學(xué)習(xí)C++的時候一定會學(xué)到STL(標(biāo)準(zhǔn)模板庫),這是C++標(biāo)準(zhǔn)庫中最重要的組成部分,它包含了常用的數(shù)據(jù)結(jié)構(gòu)和算法。今天呢,我們首先來學(xué)習(xí)STL中的vector容器
    2022-09-09
  • C++變量判定的螺旋法則示例詳解

    C++變量判定的螺旋法則示例詳解

    這篇文章主要給大家介紹了關(guān)于C++變量判定的螺旋法則,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • c++類型轉(zhuǎn)換及RTTI運行階段類型識別

    c++類型轉(zhuǎn)換及RTTI運行階段類型識別

    這篇文章主要為大家介紹了c++類型轉(zhuǎn)換及RTTI運行階段類型識別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2023-05-05
  • C語言實現(xiàn)餐飲管理系統(tǒng)

    C語言實現(xiàn)餐飲管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)餐飲管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言中main函數(shù)兩個參數(shù)的作用

    C語言中main函數(shù)兩個參數(shù)的作用

    這篇文章主要介紹了C語言中main函數(shù)兩個參數(shù)的作用,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09

最新評論

安陆市| 宜君县| 临邑县| 武城县| 阿鲁科尔沁旗| 永定县| SHOW| 商丘市| 广东省| 获嘉县| 蓬溪县| 科技| 彝良县| 阿克| 临沂市| 东辽县| 平利县| 岱山县| 石嘴山市| 咸阳市| 永年县| 正宁县| 永丰县| 库尔勒市| 滨州市| 石景山区| 西充县| 柯坪县| 林口县| 皋兰县| 忻城县| 安溪县| 四川省| 潢川县| 德安县| 沅陵县| 双牌县| 连城县| 香港 | 咸丰县| 洛南县|