原文地址: 使用openssl库实现des,3des加密

主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/des.h>
/************************************************************************
** 本例采用:
** 3des-ecb加密方式;
** 24位密钥,不足24位的右补0x00;
** 加密内容8位补齐,补齐方式为:少1位补一个0x01,少2位补两个0x02,...
** 本身已8位对齐的,后面补八个0x08。
************************************************************************/
int main(void)
{ int docontinue = 1; char *data = "hello world!"; /* 明文 */ int data_len; int data_rest; unsigned char ch; unsigned char *src = NULL; /* 补齐后的明文 */ unsigned char *dst = NULL; /* 解密后的明文 */ int len; unsigned char tmp[8]; unsigned char in[8]; unsigned char out[8]; char *k = "01234567899876543210"; /* 原始密钥 */ int key_len; #define LEN_OF_KEY 24 unsigned char key[LEN_OF_KEY]; /* 补齐后的密钥 */ unsigned char block_key[9]; DES_key_schedule ks,ks2,ks3; /* 构造补齐后的密钥 */ key_len = strlen(k); memcpy(key, k, key_len); memset(key + key_len, 0x00, LEN_OF_KEY - key_len); /* 分析补齐明文所需空间及补齐填充数据 */ data_len = strlen(data); data_rest = data_len % 8; len = data_len + (8 - data_rest); ch = 8 - data_rest; src = (unsigned char *)malloc(len); dst = (unsigned char *)malloc(len); if (NULL == src || NULL == dst) { docontinue = 0; } if (docontinue) { int count; int i; /* 构造补齐后的加密内容 */ memset(src, 0, len); memcpy(src, data, data_len); memset(src + data_len, ch, 8 - data_rest); /* 密钥置换 */ memset(block_key, 0, sizeof(block_key)); memcpy(block_key, key + 0, 8); DES_set_key_unchecked((const_DES_cblock*)block_key, &ks); memcpy(block_key, key + 8, 8); DES_set_key_unchecked((const_DES_cblock*)block_key, &ks2); memcpy(block_key, key + 16, 8); DES_set_key_unchecked((const_DES_cblock*)block_key, &ks3); printf("before encrypt:\n"); for (i = 0; i < len; i++) { printf("0x%.2X ", *(src + i)); } printf("\n"); /* 循环加密/解密,每8字节一次 */ count = len / 8; for (i = 0; i < count; i++) { memset(tmp, 0, 8); memset(in, 0, 8); memset(out, 0, 8); memcpy(tmp, src + 8 * i, 8); /* 加密 */ DES_ecb3_encrypt((const_DES_cblock*)tmp, (DES_cblock*)in, &ks, &ks2, &ks3, DES_ENCRYPT); /* 解密 */ DES_ecb3_encrypt((const_DES_cblock*)in, (DES_cblock*)out, &ks, &ks2, &ks3, DES_DECRYPT);/* 将解密的内容拷贝到解密后的明文 */ memcpy(dst + 8 * i, out, 8); } printf("after decrypt :\n"); for (i = 0; i < len; i++) { printf("0x%.2X ", *(dst + i)); } printf("\n"); } if (NULL != src) { free(src);src = NULL; } if (NULL != dst) { free(dst); dst = NULL; } return 0;
}

  

使用openssl库实现des,3des加密相关推荐

  1. 使用openssl库进行DES加密

    openssl库实现了大多数的加密算法,如AES,DES,RSA等等. 首先安装openssl库,命令如下: sudo apt-get install libssl-dev 在代码中,引用对应的头文件 ...

  2. DES/3DES加密,解密

    〇.前言 最近在项目中,涉及到与第三方厂家系统进行对接时,在参数传递过程中考虑到了数据的安全性,故双方采用3DES进行对传递参数的加解密,因此,进一步了解了下3DES的加解密算法,再次进行梳理. 一. ...

  3. AES,DES,3DES加密方式的特点

    SUMMARY DES:Data Encryption Standard(数据加密标准,又美国国密局,选中的IBM的方案,密钥长度为56,标准提出是要使用64位长的密钥,注意: 实际中DES算法只用了 ...

  4. PB DES、3DES加密解密(简单便捷)

    PB DES\3DES加密解密 通过VDN的uo_vdncore组件快速简单实现PB的DES.3DES.AES.RSA.Base64.Hex.SHA.MD5.HMac等类型的加密解密,本章我们主要讲解 ...

  5. OPENSSL库的使用-DES篇

    OPENSSL库的使用-DES篇 1 DES算法简介 1.1 DES算法介绍 1.2 工作模式 1)ECB模式 2)CBC模式 3DES 算法 2 单DES算法ECB模式加解密 2.1 使用函数DES ...

  6. C语言使用openssl库进行加密

    概述 在密码学里面一共有3中分类: 1.对称加密/解密 对称加密比较常见的有DES/AES.加密方和解密方都持有相同的密钥.对称的意思就是加密和解密都是用相同的密钥. 2.非对称加密/解密 常见的加密 ...

  7. C语言实现DES,3DES以及基于3DES的文件加密系统

    C语言实现3DES文件加密系统 DES算法 密钥操作 明文操作 3DES算法 C语言代码实现 代码效果展示 DES算法 DES(数据加密标准)是一种分组密码.明文,密文和密钥的分组长度都是64位. D ...

  8. python加密库_python基于pyDes库实现des加密的方法

    本文实例讲述了python基于pyDes库实现des加密的方法.分享给大家供大家参考,具体如下: 下载及简介地址:https://twhiteman.netfirms.com/des.html 如需要 ...

  9. C# 加密解密(DES,3DES,MD5,Base64) 类

    public sealed class EncryptUtils{#region Base64加密解密/// <summary>/// Base64加密/// </summary&g ...

  10. 单片机c语言 openssl,Linux下C语言使用openssl库进行加密

    在这里插一小节加密的吧,使用openssl库进行加密. 使用MD5加密 我们以一个字符串为例,新建一个文件filename.txt,在文件内写入hello ,然后在Linux下可以使用命令md5sum ...

最新文章

  1. 紘康单片机_紘康HY11P14 - SOC芯片 - 产品展示 - SOC芯片_IC芯片pcba开发_深圳市联泰威电子有限公司...
  2. C++模板之核心:typename
  3. 快速排序的难点_数据结构考研重难点解析:快速排序
  4. VMware下桥接设置
  5. 原理分析之一:从JDBC到Mybatis
  6. Ecsotre 参考
  7. 【NLP】Transformer自注意机制代码实现
  8. [C++ STL] 各容器简单介绍
  9. 从Github开源项目《云阅》所学到的知识
  10. FIle类常用工具方法整理(持续更新)
  11. django会话跟踪技术
  12. 关于centos7下/etc/sysconfig/目录没有iptables问题
  13. Codeforces 15C Industrial Nim 简单的游戏
  14. 【Nginx】Nginx 工作原理
  15. AcrelCloud-6800智慧消防管理云平台在学校的应用
  16. 图灵机器人不再免费(19.9元),获取调用api的key,实名认证遇到413 Request Entity Too Large问题
  17. 为什么在Excel文档单元格中输入长段数字就变为公式?干货来啦!如何解决在excel单元格中输入数字变为公式的问题?
  18. 洛谷 P1069 细胞分裂 质因数分解
  19. 浅析ARM公司在物联网领域的战略布局
  20. android录音笔记软件,录音笔记app

热门文章

  1. 离线发布bolg----使用Windows live writer客户端来发布CSDN的博客文章
  2. Rust:mod、crate、super、self、pub use等模块系统用法梳理
  3. 【交易技术前沿】券商买方投顾系统建设实践
  4. 一文了解 Serverless 2021 大事件
  5. 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 产品能力全球第一
  6. 思科CEO自爆:G20虚拟会议用的我家技术
  7. 中国最后的江湖客:有3000万人,叫卡车司机
  8. 5G时代下的移动边缘计算(MEC)探索系列之二
  9. java boolean byte_java基础boolean类型所占字节问题
  10. 【配送路径规划】基于matlab遗传算法求解单配送中心多客户多车辆最短路径规划问题【含Matlab源码 1602期】