關於加密和解密 -- 1

在對文件進行加密處理中,主要分爲兩種加密方式,對稱加密和公鑰加密,常用的對稱加密:DES, 3DES, AES128,AES256,公鑰加密:RSA。

使用公鑰加密能夠進行身份驗證以及具有不可否認性,但該加密過程相比對稱加密要慢很多,而對稱加密速度較快,但存在密鑰分配問題,所以在通常的加密處理過程中採用的方式爲: 使用對稱加密對文件進行加密,使用公鑰加密對對稱密鑰進行加密,以保證密鑰安全分配。

示例:

加密:

生成AES128密鑰 ---->  公鑰祕鑰對AES128密鑰加密 ----> 轉化爲Base64 保存到PEM文件中;

使用AES128密鑰對明文加密 ---- >  轉化爲Base64 保存到PEM文件中;

解密:

轉化Base64編碼 ----> 私鑰解密AES128 密鑰;

使用AES128密鑰對密文解密。

(1)使用RSA加密

RSA* gRSApubKey = RSA_new();

REM_read_RSA_PUBKEY(pubKeyFile, & gRSApubKey, 0,0);  // 讀取公鑰

RSA_public_encrypt( src_data_len,  src_data, encrypt_Data,  gRSApubKey,  RSA_PKCS1_PADDING);  // 對src_data加密保存到encrypt_Data中;

RSA_free(gRSApubKey);

(2)使用RSA解密

RSA* gRSApriKey = RSA_new();

PEM_read_RSAPrivateKey(priKeyFile, &gRSApriKey, 0, 0) ; // 讀取私鑰

RSA_private_decrypt(src_data_len, src_data, decrypt_Data, gRSApriKey, RSA_PKCS1_PADDING); // 解密src_data

RSA_free(gRSApriKey);

(3)AES加密

生成隨機數作爲密鑰 key; 生成隨機數作爲初始化矢量 Arr;

AES_KEY aes;

AES_set_encrypt_key( key, size, &aes); // 讀取密鑰, size=128或256,密鑰長度(AES128或AES256加密);

AES_cbc_encrypt( srcData,desData,srcData_len, &aes, Arr, AES_ENCRYPT);//將srcData加密保存到desData中

(4)AES解密

獲取key及 Arr

AES_KEY aes;

AES_set_decrypt_key(key, size, &aes);

AES_cbc_encrypt(srcData, desData, srcData_len, &aes, Arr, AES_DECRYPT); // 解密srcData中的數據到desData中。


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章