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,