91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何利用DES模塊實現加密功能

發布時間:2022-04-01 17:32:20 來源:億速云 閱讀:341 作者:iii 欄目:編程語言

這篇文章主要講解了“C語言如何利用DES模塊實現加密功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言如何利用DES模塊實現加密功能”吧!

DES(Data Encryption Standard)

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

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

AES(Advanced Encryption Standard)

是美國聯邦政府采用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)于2001年11月26日發布于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 <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;
}

感謝各位的閱讀,以上就是“C語言如何利用DES模塊實現加密功能”的內容了,經過本文的學習后,相信大家對C語言如何利用DES模塊實現加密功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

诸城市| 甘孜| 龙江县| 丹棱县| 南昌市| 北安市| 武安市| 高阳县| 东阿县| 德化县| 合江县| 贵定县| 隆子县| 财经| 永宁县| 铁岭市| 滕州市| 武夷山市| 泉州市| 靖西县| 湛江市| 松阳县| 视频| 个旧市| 宁津县| 西吉县| 邵阳县| 家居| 海安县| 奉节县| 柯坪县| 嵊州市| 大埔县| 陕西省| 永寿县| 漾濞| 太白县| 彭阳县| 托里县| 嵊泗县| 绥滨县|