1. 程式人生 > >LINUX、C#下使用DES演算法CBC模式進行對稱加密、解密

LINUX、C#下使用DES演算法CBC模式進行對稱加密、解密

openssl是一個加密庫,封裝了多個演算法,我們這裡使用的是DES演算法CBC模式

一、準備OPENSSL的LINUX及C#庫

openssl專案地址:

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 = "
[email protected]
"; //加密向量 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; }


相關推薦

LINUXC#使用DES演算法CBC模式進行對稱加密解密

openssl是一個加密庫,封裝了多個演算法,我們這裡使用的是DES演算法CBC模式。 一、準備OPENSSL的LINUX及C#庫 openssl專案地址: C#下使用自帶庫 二、操作

可以相互解密C#版及C++版DES演算法程式碼(包括ECBCBC模式,ZerosPKCS7填充,以及Base64編解碼)

由於C#中對於DES演算法有標準類,所以使用起來特別簡單;但C++就有點費勁了,經過整合網上資源並修改bug,現在放出完整C++DES演算法程式碼,已測試通過。這裡要特別感謝http://blog.csdn.net/bengold1979/article/details/2

LINUXC#使用zlib進行對稱壓縮解壓

zlib是一個壓縮庫,封裝了多個演算法,我們這裡使用的是zip。 一、準備zlib的LINUX及C#庫 zlib專案地址: zlib.net專案地址(for C#): 二、操作函式

DELPHIPHPC#通用DES編碼解碼單元 (DELPHI使用的程式碼)

unit uDES; {*********************************************************} {* DELPHI、PHP、C#通用DES編碼解碼單元 *} {* blessed

C#用Emgucv對圖片進行灰度化二值化邊緣檢測膨脹腐蝕運算霍夫變換進行表格識別

 其中每個部分的原理相信在各種書籍和網站上都容易找到,這裡是C#下用Emgucv實現以上相關操作的原始碼全部,轉載請註明http://write.blog.csdn.net/postlist http://blog.csdn.net/yimingsilence/ar

Java與C#互動DES演算法加密解密資料

    要加密結果一樣,其實很簡單,只要IV值和金鑰一樣,出來的結果應該都是一樣的。     C#的DES加密解密演算法:金鑰長度為8 public static string Encode(string encryptString, string encryptKey)

C# 設置Word文檔保護(加密解密權限設置)

C# .NET Word API 控件 免費類庫 Word 加密、解密 對於一些重要的word文檔,出於防止資料被他人查看,或者防止文檔被修改的目的,我們在選擇文檔保護時可以選擇文檔打開添加密碼或者設置文檔操作權限等,在下面的文章中將介紹如何使用類庫Free Spire.Doc for .

PHP設計模式:類自動載入PSR-0規範鏈式操作11種面向物件設計模式實現和使用OOP的基本原則和自動載入配置

一、類自動載入      SPL函式 (standard php librarys)      類自動載入,儘管 __autoload() 函式也能自動載入類和介面,但更建議使用&nbs

PHP AES cbc模式 pkcs7 128加密解密

今天在對接一個第三方介面的時候,對方需要AES CBC模式下的加密。這裡簡單寫一個demo class Model_Junjingbao extends Model { private static $_partnerKey = '6d70a09e4d0f8095'; //

C/C++按照檔案屬性對檔案進行復制移動刪除操作

//歡迎指正,轉載請註明出處:https://blog.csdn.net/qq_42189368/article/details/80670210 ////程式碼:資料夾中限制檔案數目,超出數目後,按照建立時間順序,刪除時間最早的檔案 #include <io.

題目:輸入一個字串,打印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元abc所能排列出來的所有字串abcacbbacbcacab和cba。

題目:輸入一個字串,打印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。 /** * */ pack

DES/3DES/AES 三種對稱加密演算法在 Java 中的實現

有兩句話是這麼說的:1)演算法和資料結構就是程式設計的一個重要部分,你若失掉了演算法和資料結構,你就把一切都失掉了。2)程式設計就是演算法和資料結構,演算法和資料結構是程式設計的靈魂。注意,這可不是我說的,是無數程式設計師總結的,話說的很實在也很精闢,若想長久可持續發展,多研

資訊保安的基礎:對稱加密對稱加密摘要演算法

加密分為兩大類:對稱加密、非對稱加密,兩類加密演算法各有優點,在不同的場景使用不同的演算法。 對稱加密 加密方將原始資料和加密金鑰一起經過特殊加密演算法處理後,生成密文結果,解密方使用相同的祕鑰及相同加密演算法的逆演算法對密文結果進行解密,公式如下:

摘要演算法對稱加密對稱加密數字簽名數字證書淺析

年前整理的關於摘要演算法、對稱加密、非對稱加密、數字簽名、數字證書的內容,當時是以 ppt 的形式整理的,不方便複製到 csdn部落格中,因此將其轉換為 png 圖片。文章僅代表個人觀點,如有不正之處,

C#對List中的資料進行取交集並集差集和去重操作的方法

第一步:定義兩個list並進行初始化 public List<string> GetList1()         {             List<string> lis

MD5對稱加密對稱加密的比較區別(乾貨)

轉載處:https://blog.csdn.net/lg2179/article/details/52535965       md5是一種不可逆的加密,一定記住是不可逆的。雖然現在很多演算法也可以將md5解密出來但是md5還是具有很大程度上的不可逆,而且

幾個例子理解對稱加密與非對稱加密公鑰與私鑰簽名與驗籤數字證書HTTPS加密方式

# 原創,轉載請留言聯絡 為什麼會出現這麼多加密啊,公鑰私鑰啊,簽名啊這些東西呢?說到底還是保證雙方通訊的安全性與完整性。例如小明發一封表白郵件給小紅,他總不希望給別人看見吧。而各種各樣的技術就是為了保障通訊的安全。(本文務必從上到下看) 1.對稱加密與非對稱加密 對稱加密: 對稱加密是

對稱加密和非對稱加密數字簽名數字證書的區別

之前在面試的時候被問到了HTTPS,SSL這樣的知識點,也沒答上來,這裡也簡單整理一下。 首先還是來解釋一下基礎的東東: 對稱加密: 加密和解密都是用同一個金鑰 非對稱加密: 加密用公開的金鑰,解密用私鑰 (私鑰只有自己知道

[譯]最佳安全實踐:在 Java 和 Android 中使用 AES 進行對稱加密:第2部分:AES-CBC + HMAC

原文地址:Security Best Practices: Symmetric Encryption with AES in Java and Android: Part 2: AES-CBC + HMAC 本文是我上一篇文章:“最佳安全實踐:在 Java 和 Android 中使用 AES 進行

和安全有關的那些事(非對稱加密數字摘要數字簽名數字證書SSLHTTPS及其他)

本文原文連線:http://blog.csdn.net/bluishglc/article/details/7585965 對於一般的開發人員來說,很少需要對安全領域內的基礎技術進行深入的研究,但是鑑於日常系統開發中遇到的各種安全相關的問題,熟悉和了解這些安全技術的基本原理和使用場景還是非常必要的。本文將對