LINUX、C#下使用DES算法CBC模式进行对称加密、解密

2 篇文章 0 订阅

openssl是一个加密库,封装了多个算法,我们这里使用的是DES算法CBC模式


一、准备OPENSSL的LINUX及C#库

openssl项目地址:

https://www.openssl.org/

C#下使用自带库


二、操作函数

在C#下加密解密:
using System.Text;
using System.IO;
using System.Security.Cryptography;

DES des_cbc = new DESCryptoServiceProvider();

public byte[] key_b;
public byte[] iv_b;

/// <summary>初始化</summary>
/// <param name="key">密钥</param>
/// <param name="vi">向量</param>
public void init(string key, string vi)
{
    key_b = ASCIIEncoding.UTF8.GetBytes(key);  //密钥  
    iv_b = ASCIIEncoding.UTF8.GetBytes(vi);   //初始化向量  
    des_cbc.Mode = CipherMode.CBC;
    des_cbc.Padding = PaddingMode.Zeros;
}

/// <summary>DES加密CBC模式0补齐</summary>
/// <param name="input">明文</param>
public byte[] ecrypt(byte[] input)
{
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, des_cbc.CreateEncryptor(key_b, iv_b), CryptoStreamMode.Write);
    cs.Write(input, 0, input.Length);
    cs.Close();
    byte[] ciphertext = ms.ToArray();
    return ciphertext;
}

/// <summary>DES解密CBC模式0补齐</summary>
/// <param name="input">明文</param>
public byte[] decrypt(byte[] input)
{
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, des_cbc.CreateDecryptor(key_b, iv_b), CryptoStreamMode.Write);
    cs.Write(input, 0, input.Length);
    cs.FlushFinalBlock();
    byte[] ciphertext = ms.ToArray();
    return ciphertext;
}

在LINUX下压缩解压:
#include <stdio.h>
#include <string.h> 
#include <stdlib.h>  
#include <openssl/des.h> 

// DES-CBC加密方式  * 8位密钥,加密内容8位补齐,补齐方式为填充0
int main(int argc, char *argv[])
{
	
	unsigned char buff[20]={"123412341234"};
	unsigned char encry_buff[20] ;
	int packet_len = strlen(buff);
	
	int i;
	int encry_len;
	memset(encry_buff,0,20);
		
	//密钥
	DES_cblock KEY_DES = "pk$@gtjt";		
	//加密向量
	DES_cblock ivec = "thvn#&@@";	
	//解密向量
	DES_cblock ivec_de = "thvn#&@@";	
	DES_key_schedule schedule;			 	
	DES_set_key_unchecked((const_DES_cblock*)KEY_DES, &schedule);			 	
			 			 	
	encry_len = (strlen(buff)+7)/8*8;//长度		
		
	unsigned char *output=(char*)malloc(encry_len);	
	
	//加密
	memset(output,0,strlen(output));
	DES_ncbc_encrypt(buff, output, strlen(buff), &schedule, &ivec, DES_ENCRYPT);

	//解密
 	memset(buff,0,20);
 	DES_ncbc_encrypt(output, buff, strlen(output), &schedule, &ivec_de, DES_DECRYPT);

 	free(output);
 	return 0;	 	
} 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值