最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C語言下如何利用DES模塊實現(xiàn)加密功能

本篇內(nèi)容介紹了“C語言下如何利用DES模塊實現(xiàn)加密功能”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)是一家以網(wǎng)絡技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護、做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)站備案、服務器租用、國際域名空間、軟件開發(fā)、微信小程序開發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務,是一家有著豐富的互聯(lián)網(wǎng)運營推廣經(jīng)驗的科技公司,有著多年的網(wǎng)站建站經(jīng)驗,致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個面向全國乃至全球的業(yè)務窗口:建站來電聯(lián)系:18980820575

DES(Data Encryption Standard)

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

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

AES(Advanced Encryption Standard)

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

編譯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 
#include 
#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;
}

“C語言下如何利用DES模塊實現(xiàn)加密功能”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


網(wǎng)站欄目:C語言下如何利用DES模塊實現(xiàn)加密功能
URL鏈接:http://fisionsoft.com.cn/article/psosdj.html