在對文件進行加密處理中,主要分爲兩種加密方式,對稱加密和公鑰加密,常用的對稱加密: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中。