1. 程式人生 > >Openssl aes對稱加密演算法 加解密例程 1

Openssl aes對稱加密演算法 加解密例程 1

前面我們用openssl的aes256對稱加密演算法對16個位元組的記憶體塊進行了的加解密運算測試,現在更進一步,對指定大小的記憶體塊進行加解密運算。

首先明確一下aes是分組加密演算法,且每次加密的記憶體塊是16個位元組,所以,我們需要加密的記憶體塊必須是16個位元組的整數倍,若不是,則需要進行補齊。

常見的對稱加解密演算法中rc2,rc4都是流加密,也就是以位元組為單位進行加解密,而aes,des,3des,idea,blowfish,towfish,這些都是分組加密,都要求被加密的資料塊進行位元組對齊。

對於大於16個位元組的記憶體塊進行加密運算無非就是迴圈呼叫16位元組加密運算。

參考以下例程:

#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/aes.h>
#pragma comment(lib,"libeay32.lib")
int main(int argc, char **argv)
{
    unsigned char buf[512];
    unsigned char buf2[512];
    unsigned char buf3[512];
    unsigned char aes_keybuf[32];
    memset(buf,1,sizeof(buf));    
    memset(buf,0,sizeof(buf2));    
    memset(buf,0,sizeof(buf3));
    memset(aes_keybuf,0,sizeof(aes_keybuf));
    AES_KEY aeskey;
    AES_set_encrypt_key(aes_keybuf,256,&aeskey);
    for(int i=0;i<sizeof(buf);i+=16)
    AES_encrypt(buf+i,buf2+i,&aeskey);
    AES_set_decrypt_key(aes_keybuf,256,&aeskey);
    for(int i=0;i<sizeof(buf);i+=16)
    AES_decrypt(buf2+i,buf3+i,&aeskey);
    if(memcmp(buf,buf3,sizeof(buf))==0)
        printf("test success\r\n");
    else
        printf("test fail\r\n");
}

這裡的例程實際上是使用AES加密演算法的ECB模式,另外還有CBC,CFB,OFB三種模式,簡單的說,後面三種模式實際上是讓上一個16位元組的資料塊加密的結果參與下一個16位元組資料塊加密運算,所以採用ECB模式進行加密時對內容相同的資料塊加密的結果是相同的,採用CBC,CFB,OFB三種模式三種模式時加密的結果不光與源資料塊內容相關,還跟加密的順序有關。

最後再提一點,採用分組加密演算法的時候,由於加密資料的最小單位是分組的大小,如aes的16個位元組,des的8個位元組,在加密檔案時需要進行位元組補齊,所以加密檔案的結果可能會和原始檔案一樣大或者稍大於原始檔案。在進行解密運算時,需要在解密後把補齊的位元組再去除掉,才能夠真正還原原始檔案。

相關推薦

Openssl aes對稱加密演算法 解密 1

前面我們用openssl的aes256對稱加密演算法對16個位元組的記憶體塊進行了的加解密運算測試,現在更進一步,對指定大小的記憶體塊進行加解密運算。 首先明確一下aes是分組加密演算法,且每次加密的記憶體塊是16個位元組,所以,我們需要加密的記憶體塊必須是16個位元組的整數倍,若不是,則需要進行補齊。

AES 對稱加密演算法 加密\解密例項

package com.soufun.com; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuc

openssl對稱加密演算法DSA命令詳解

1、DSA演算法概述 DSA演算法是美國的國家標準數字簽名演算法,它只能使用者數字簽名,而不能使用者資料加密和金鑰交換。 DSA與RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成金鑰(包括公鑰),而通常情況下,DSA是先生成DSA的金鑰引數,然後

Java利用 AES/ECB/PKCS5Padding 演算法解密

Java利用  AES/ECB/PKCS5Padding 演算法加解密。 package com.newland.njwpayment.utils;   import javax.crypto.Cipher;   import javax.crypto.spec.

Java 加密 AES 對稱加密演算法

【AES】 一種對稱加密演算法,DES的取代者。 【程式碼】 程式碼比較多,有一部分非本文章內容程式碼,具體自己看吧。 package com.uikoo9.util.encrypt; import java.math.BigInteger; import java

c語言通過openssl aes對稱解密和base64編解碼將密碼儲存成密文

今天遇到這樣一個問題,將客戶端中的一個密碼儲存到檔案中以供下次使用,但是儲存的密碼不能直接儲存明文,需要進行加密處理,再三考慮之後,這個加密的過程需要雙向的可逆的過程,MD5等方式是不適用的,因為記住密碼意味著下次我還需要還原這個密碼進行使用,所以最後選擇了openssl的aes演算法,然而ae

java的對稱加密演算法 AES -----加密解密

背景 隨著對稱密碼的發展,DES資料加密標準演算法由於金鑰長度較小(56位),已經不適應當今分散式開放網路對資料加密安全性的要求,因此1997年NIST公開徵集新的資料加密標準,即AES[1]。經過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提

Java 加密解密 對稱加密演算法對稱加密演算法 MD5 BASE64 AES RSA

【前言】 本文簡單的介紹了加密技術相關概念,最後總結了java中現有的加密技術以及使用方法和例子 【最簡單的加密】1.簡單的概念 明文:加密前的資訊 密文:機密後的資訊 演算法:加密或解密的演算法 金鑰:演算法使用的鑰匙(讀作miyao,正確應該是miyue,但是大家都讀m

.NET Core解密實戰系列之——RSA非對稱加密演算法

![](https://img2020.cnblogs.com/blog/2029875/202006/2029875-20200612165254059-1754283874.png) --- [TOC] ## 簡介 加解密現狀,編寫此專案的背景: - 需要考慮系統環境相容性問題(Linux、Wi

.NET Core解密實戰系列之——對稱加密演算法

## 簡介 加解密現狀,編寫此係列文章的背景: - 需要考慮系統環境相容性問題(Linux、Windows) - 語言互通問題(如C#、Java等)(加解密本質上沒有語言之分,所以原則上不存在互通性問題) - 網上資料版本不一、或不全面 - .NET官方庫密碼演算法提供不全面,很難針對其他語言(Java)進

php openssl_sign() 語法+RSA公私鑰加密解密,非對稱加密演算法詳解

其實有時候覺得寫部落格好煩,就個函式就開篇部落格。很小的意見事情而已,知道的人看來多取一舉,或者說沒什麼必要,浪費時間,不知道的人就會很鬱悶。技術就是這樣的,懂的人覺得真的很簡單啊,不知道的人真的好難。。。 一般在跟第三方介面對接資料的時候,為了保證很多都使用的RSA簽名,沒性趣瞭解的同學只需要

RSA非對稱加密演算法(表單提交時,前端js加密,後端java解密)

RSA非對稱加密演算法(表單提交時,前端js加密,後端java解密 非對稱加密演算法 需要的工具 前端jsp頁面 js程式碼 加密解密的工具類 產生公鑰的類 處理登陸請求的類 加密成功的密碼 非對稱加密演算

JAVA密碼加密演算法.RSA演算法(非對稱加密演算法)和密碼鹽MD5

密碼加鹽MD5 Message Digest Algorithm MD5(中文名為訊息摘要演算法第五版)為電腦保安領域廣泛使用的一種雜湊函式,用以提供訊息的完整性保護。 是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、雜湊演算法),主流程式語言普遍已有MD5實現。將資料(如漢字)運

加密演算法-對稱加密,支援解密;

前言 目前市面上的加密演算法,有很多,什麼AES,什麼MD5,等, 有的能反解密,有的不能反解密; 加密的目的是為了增加盜取資料的難度。比如密碼; 增加截包資料分析難度;不在是明文傳送; 思路 為了前端(u3D,C#程式碼)和後端java程式碼,統一版本保持高一致性;保證不出錯,加密過程便於自己控制; 我是一

對稱加密演算法-DES,3DES,AES

1.jdk與bc實現DES演算法: package com.samlai.security; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.sec

openssl 對稱加密演算法enc命令詳解

1、對稱加密演算法概述 openssl的加密演算法庫提供了豐富的對稱加密演算法,我們可以通過openssl提供的對稱加密演算法指令的方式使用,也可以通過呼叫openssl提供的API的方式使用。 openssl的對稱加密演算法指令主要用來對資料進行加密和解密處理,openssl基本上為所有其支援的對稱加密演

對稱加密演算法AES 工具類,拿來可用

package com.xiaojukeji.visitor.common.util; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.No

常用對稱加密演算法(DES/AES)類(PHP)

看註釋,啥也不說了,歡迎各種跨平臺測試! /** * 常用對稱加密演算法類 * 支援金鑰:64/128/256 bit(位元組長度8/16/32) * 支援演算法:DES/AES(根據金鑰長度自動匹配使用:DES:64bit AES:128/256bit) * 支

DES 3DES AES Blowfish 對稱加密演算法比較

計算機加密技術分為對稱加密,及非對稱加密兩種技術. 對稱加密技術基本的實現是:資料傳送方和資料接收方共享一個金鑰,進行資料加密和解密工作。但是他也有個問題,就是一旦金鑰被第三方獲取,資料安全性就無法保證。 非對稱加密技術中,資料傳送方和接收方利用不同的金鑰進行資料加密及解密工作。簡言之,就是金鑰1只能

OpenSSL中HMAC,MD5以及對稱加密演算法的應用

HMAC和MD5: HMAC的使用:#include <openssl/hmac.h> unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,