1. 程式人生 > >利用openssl裡的庫函式進行AES的加解密—cbc

利用openssl裡的庫函式進行AES的加解密—cbc

 本人嘗試編寫的測試利用openssl庫函式進行AES中cbc的加解密,至於其它ecb,cfb,ofb等的加解密可套路以下程式。

在貼程式碼之前本人需要分享三個網站,個人認為對理解AES加解密和text的編寫極有用處

接下來便是本人編寫的小測試
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <openssl/aes.h>

int main()
{
	char Source[100];
	unsigned char *InputData = NULL;
	unsigned char *EncryptData = NULL;
	unsigned char *DecryptData = NULL;
	unsigned char ivec[AES_BLOCK_SIZE];
	unsigned char key[AES_BLOCK_SIZE];
	AES_KEY AesKey;
	
	strcpy(Source, "1234567890abcde");	//the data which need to be encrypted
	int SetDataLen = strlen(Source)+1;
	int DataLen = strlen(Source);
	printf("%d\n",SetDataLen);
	
	//generate own AES key
	for(int iloop = 0;iloop < 16; iloop++)
	{
		key[iloop] = 32 + iloop;
	}
	
	InputData = (unsigned char *)calloc(SetDataLen+1, sizeof(char));   //distribute the place to put datas
	memcpy(InputData, Source, DataLen);          //put source into inputdata
	EncryptData = (unsigned char *)calloc(SetDataLen+1, sizeof(char));
	DecryptData = (unsigned char *)calloc(SetDataLen+1, sizeof(char));
	//set encryption key
	if(AES_set_encrypt_key(key,128,&AesKey)<0)
	{
		printf("Unable to set encryption key in AES...\n");
	} 
	for(int i=0;i<AES_BLOCK_SIZE; i++)
	{
		ivec[i] = 0;            //ivec is like the first IV in the picture
	}
	for(int i = 0; i<16; i++)
	{
		printf("%02x ",InputData[i]);   //for text the data in the Inputdata
	}
	printf("\n");
	
	//encryption
	AES_cbc_encrypt(InputData,EncryptData,SetDataLen,&AesKey,ivec,AES_ENCRYPT);
	for(int i=0; i<16; i++)
	{
		printf("%02X ", *(EncryptData+i));      //put out the number of encryptdata in hex formats
	}
	printf("\n");
	
	// set decryption key
	if(AES_set_decrypt_key(key,128,&AesKey)<0)   //AES_set_decrypt_key is to get the AesKey 
	{
		printf("Unable to set encryption key in AES...\n");
	} 
	for(int i=0;i<AES_BLOCK_SIZE; i++)
	{
		ivec[i] = 0;                 //the ivec to decryption should be same with encryption
	}
	//decryption
	AES_cbc_encrypt(EncryptData, DecryptData,SetDataLen,&AesKey,ivec,AES_DECRYPT);
	for(int i=0; i<16; i++)
	{
		printf("%02X ", DecryptData[i]);     //put out the number of decryptdata in hex formats
	}
	printf("\n");
	//printf("DecryptData:%s...\n", (char *)DecryptData);
	
	
	return 0;
}


相關推薦

UNIX下利用OpenSSL對大檔案進行AES解密

      由於專案需要檔案傳輸過程中對其進行加解密,所以就在網上查詢下加解密的相關介紹,最開始採用RSA加解密演算法,先是利用RSAEuro折騰了半天編譯的環節卡住了(編譯報錯查不出原因),後面網上發現利用OpenSSL的實現方法比較簡單。       OpenSSL

利用openssl函式進行AES解密cbc

 本人嘗試編寫的測試利用openssl庫函式進行AES中cbc的加解密,至於其它ecb,cfb,ofb等的加解密可套路以下程式。 在貼程式碼之前本人需要分享三個網站,個人認為對理解AES加解密和text的編寫極有用處 接下來便是本人編寫的小測試 #include

Java中使用OpenSSL RSA公私鑰進行資料解密儲存

使用openSSL 生成公私鑰可以參考作者 JackCousins 的文章 @http://blog.csdn.net/chaijunkun/article/details/7275632 寫的非常好,鼓掌 但在使用的過程中發現 ,例如 我在手機中可以使用公鑰簽名,伺服器

OpensslAES解密——CBC模式

因工作需要接觸了一端是見AES,一些需要注意的地方提醒一下新手,少走一些彎路(個人開發遇到的問題,不對專業名詞進行解釋)。本人C++開發,所以此文章傾向於C++。 使用Openssl實現的CBC的加解密,所需的Openssl庫、標頭檔案和封裝類見文章底部。 文章模組: 1、

使用java_aes_crypt對檔案進行AES解密

下載jce_policy-6.zip,更新JCE Unlimited Strength Jurisdiction Policy Files,詳見readme檔案http://www.aescrypt.com/java_aes_crypt.html使用AESCrypt.javapublic static voi

利用標準C語言函式進行文字檔案讀寫

    利用C語言進行檔案操作的方法有多種。其中包括在UNIX系統環境下利用系統介面進行檔案操作;在windows系統下可以利用windows系統下可以利用fopen_s等庫函式的安全版本進行檔案操作。但是用的最多的就是利用標準庫函式進行檔案操作。本文主要介紹利用C標準庫函

PHP利用openssl整理AES解密

<?php /** * Created by PhpStorm. * User: nassir * Date: 2017/12/11 * Time: 15:25 */ namespace Ryanc\RSA; class AES {

使用OpenSSLAES解密

AesTest.cpp #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcn

Java實現MD5演算法過程,並利用自帶MD5函式進行對比校驗

文章目錄 一、環境說明 二、演算法原理概述 三、程式設計 資料結構 重要模組步驟 四、執行結果 一、環境說明 作業系統:window10 程式語言:Java (J

利用C語言函式,實現字串相關函式

1 #include<stdio.h> 2 3 int strLength(char* s)//求字元長度 4 { 5 int i=0; 6 while(s[i]!=NULL) 7 { 8 i++; 9 }

Android Hook程式,對函式進行HOOK

1、Hook原理 Hook技術,其本質就是劫持函式的呼叫,但是由於處於Linux使用者態,每個程序都有自己獨立的程序空間,所以必須先注入到所要Hook的程序空間,修改其記憶體中的程序程式碼,替換其過程表的符號地址。在Android中,一般是通過ptra

不用函式進行字串和整型資料的相互轉換

//  字串轉換成整型資料 double stoi (char* string = NULL){ if (string == NULL) throw 1;  // 空字串判斷  int i = 0; d

Java中使用OpenSSL生成的RSA公私鑰進行資料解密

RSA是什麼:RSA公鑰加密演算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公

淺析利用高斯核函式進行半監督分類

Laplacian Regularization In Least Square learning methods, we calculate the Euclidean distance between sample points to find a cla

AES解密

ext ole gen public 去掉 ati 默認 cal algo public class AESHelper { /// <summary> /// 獲取密鑰 /// </summar

Java中的AES解密

body 方式 keys enc aes加密 col decode 解密 encoder 直接上代碼,Base64使用的是Java8的方法,如沒有,替換即可 KEY:即密碼 IV:即偏移量,可自訂,十六位 加密方式:AES/CBC/PKCS5Padding,128位加密 如

C++的AES解密

aes加解密 大致 filter aes buffere extern pos data rcp   最近公司項目要做個WPF程序,但是底層加密部分要用C++來實現。通過網上搜索各種資料,地址已經記不下了,沒發貼出來了! 下面看看如何加解密的~!先貼代碼。。。。 1

Java中的AES解密工具類:AESUtils

.com asc += for frame day 換行 fault mod 本人手寫已測試,大家可以參考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysC

AES解密過程

secret keys nco vat 過程 encode string exception init 1 package com.pff.pff; 2 3 import java.security.SecureRandom; 4 5 import java

Java、C#雙語版配套AES解密示例

rijndael rand encrypt encoding res ace secret names tar   這裏采用的加解密使用base64轉碼方法,ECB模式,PKCS5Padding填充,密碼必須是16位,否則會報錯!   模式:Java的ECB對應C#的Sys