千家信息网

C语言如何利用DES模块实现加密功能

发表于:2024-12-03 作者:千家信息网编辑
千家信息网最后更新 2024年12月03日,这篇文章主要讲解了"C语言如何利用DES模块实现加密功能",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C语言如何利用DES模块实现加密功能"吧!DES
千家信息网最后更新 2024年12月03日C语言如何利用DES模块实现加密功能

这篇文章主要讲解了"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.gztar -zxf openssl-1.0.0c.tar.gzcd openssl-1.0.0c/./config --prefix=/usr/local --openssldir=/usr/local/sslmake && make install./config shared --prefix=/usr/local --openssldir=/usr/local/sslmake cleanmake && 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 globenv = 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模块实现加密功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

加密 标准 功能 模块 语言 代码 美国 国家 学习 高级 对称 内容 政府 数据 电子 算法 研究 编译 有效 主导 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江西常见软件开发哪家便宜 数据库如何存储时间 博雅数据库文科二本湖南 知网研学平台数据库文献 数据库算平均值的公式 c数据库编程教程 数据库系统原理李建中 十四五规划下的网络安全 电脑显示无法联系dhcp服务器 青岛erp软件开发服务 数据库怎么在电脑上下载 兰象互联网科技 数据库学生信息录入的id idc服务器需要注意什么 2021山东网络安全投档 博途更新无法连接服务器什么意思 销售数据库属于什么开票类别 中文图书类数据库检索需求 早教中心网络安全 海阳定制软件开发哪家靠谱 铁路网络安全事件有害程序事件 甘肃省委网络安全领导小组 5288服务器分解图 计算机网络技术研究的论文 公司会涉及到哪些数据库知识 开放的网络安全性如何 计算机网络技术概念思维导图 高中网络技术应用测试题 手工制作表格数据库 出生日期用什么类型的数据库
0