使用openssl库实现des,3des加密

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 原文地址:http://blog.chinaunix.net/uid-25943311-id-3020013.html整理转载自:http://blog.csdn.net/xuplus/article/details/2607254主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题。

原文地址:http://blog.chinaunix.net/uid-25943311-id-3020013.html

整理转载自:http://blog.csdn.net/xuplus/article/details/2607254
主要是调整了一下格式,以及一些变量的类型,以解决在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; 
}


目录
相关文章
|
1月前
|
算法 安全 数据安全/隐私保护
Crypto++库支持多种加密算法
【10月更文挑战第29天】Crypto++库支持多种加密算法
81 4
|
3月前
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
80 1
|
2天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
13 4
2023/11/10学习记录-C/C++对称分组加密DES
|
2天前
|
算法 数据安全/隐私保护 Python
DES加密初探
本文介绍了Python中常用的DES和3DES加解密方法,包括ECB和CBC模式。通过示例代码展示了如何使用`Crypto`和`pyDes`库实现加解密,并讨论了不同的填充方式。最后,通过一道CTF例题,详细解析了从图像中提取密文、进行ASCII转换、Base64解码、凯撒解码和最终的DES解密过程。
20 4
DES加密初探
|
4月前
|
存储 算法 数据库
使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
`hashlib` 是 Python 中用于实现哈希功能的模块,它可以将任意长度的输入通过哈希算法转换为固定长度的输出,即散列值。该模块主要用于字符串加密,例如将用户名和密码转换为不可逆的散列值存储,从而提高安全性。`hashlib` 提供了多种哈希算法,如 `md5`、`sha1`、`sha256` 等。
68 1
|
4月前
|
Ubuntu Linux 数据安全/隐私保护
使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
本文介绍了在Linux系统(Ubuntu 18.04)下将Python源代码(`.py文件`)加密为`.so文件`的方法。首先安装必要的工具如`python3-dev`、`gcc`和`Cython`。然后通过`setup.py`脚本使用Cython将`.py文件`转化为`.so文件`,从而实现源代码的加密保护。文中详细描述了从编写源代码到生成及调用`.so文件`的具体步骤。此方法相较于转化为`.pyc文件`提供了更高的安全性。
209 2
|
4月前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
194 1
|
5月前
|
C# 数据安全/隐私保护
Des加密和解密
Des加密和解密
52 0
|
13天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
14天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
38 10