91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-02
  • 語言: C/C++
  • 標簽: encryp??

資源簡介

實現加密算法: 【NULL算法】 函數:EVP_enc_null()該算法不作任何事情,也就是沒有進行加密處理 【DES算法】 函數:EVP_des_cbc(void), EVP_des_ecb(void), EVP_des_cfb(void), EVP_des_ofb(void) 說明:分別是CBC方式、ECB方式、CFB方式以及OFB方式的DES算法 【使用兩個密鑰的3DES算法】 函數:EVP_des_ede_cbc(void), EVP_des_ede(), EVP_des_ede_ofb(void),EVP_des_ede_cfb(void) 說明:分別是CBC方式、ECB方式、CFB方式以及OFB方式的3DES算法,算法的第一個密鑰和最后一個密鑰相同,事實上就只需要兩個密鑰 【使用三個密鑰的3DES算法】 函數:EVP_des_ede3_cbc(void), EVP_des_ede3(), EVP_des_ede3_ofb(void), EVP_des_ede3_cfb(void) 說明:分別是CBC方式、ECB方式、CFB方式以及OFB方式的3DES算法,算法的三個密鑰都不相同 。 。 。 。 。 。 注: 這些加密算法函數調用時返回的都是對應EVP_CIPHER結構體指針 */

資源截圖

代碼片段和文件信息

#include?
#include?
#include?


typedef?unsigned?char?uchar;

/*使用openssl提供的API實現*/
int?aes_encrypt_api()
{
????uchar?userkey[AES_BLOCK_SIZE];
????uchar?*data?=?malloc(AES_BLOCK_SIZE*3);
????uchar?*encrypt?=?malloc(AES_BLOCK_SIZE*6);
????uchar?*plain?=?malloc(AES_BLOCK_SIZE*3);
????AES_KEY?key;

????memset((void*)userkey?‘k‘?AES_BLOCK_SIZE);
????memset((void*)data?‘h‘?AES_BLOCK_SIZE*3);
????memset((void*)encrypt?0?AES_BLOCK_SIZE*6);
????memset((void*)plain?0?AES_BLOCK_SIZE*3);

????/*設置加密key及密鑰長度*/
????AES_set_encrypt_key(userkey?AES_BLOCK_SIZE*8?&key);


????int?len?=?0;
????/*循環加密,每次只能加密AES_BLOCK_SIZE長度的數據*/
????while(len?????????AES_encrypt(data+len?encrypt+len?&key);????
????????len?+=?AES_BLOCK_SIZE;
????}
????/*設置解密key及密鑰長度*/????
????AES_set_decrypt_key(userkey?AES_BLOCK_SIZE*8?&key);

????len?=?0;
????/*循環解密*/
????while(len?????????AES_decrypt(encrypt+len?plain+len?&key);????
????????len?+=?AES_BLOCK_SIZE;
????}

????printf(“encrypt:?“);
????int?i?=?0;
????for(i?=?0;?i?????????printf(“%02x“?encrypt[i]);
????????if((i+1)?%?32?==?0){
????????????printf(“\n“);????
????????}
????}
????printf(“\n“);???
????printf(“plain:?%s\n“?plain);

????return?0;
}


/*使用EVP框架*/
int?aes_encrypt_evp()
{
????char?userkey[EVP_MAX_KEY_LENGTH];
????char?iv[EVP_MAX_IV_LENGTH];
????uchar?*data?=?malloc(AES_BLOCK_SIZE*3);
????uchar?*encrypt?=?malloc(AES_BLOCK_SIZE*6);
????uchar?*plain?=?malloc(AES_BLOCK_SIZE*6);
????EVP_CIPHER_CTX?*ctx;
????int?ret;
????int?tlen?=?0;
????int?mlen?=?0;
????int?flen?=?0;

????memset((void*)userkey?‘k‘?EVP_MAX_KEY_LENGTH);
????memset((void*)iv?‘i‘?EVP_MAX_IV_LENGTH);
????memset((void*)data?‘h‘?AES_BLOCK_SIZE*3);
????memset((void*)encrypt?0?AES_BLOCK_SIZE*6);
????memset((void*)plain?0?AES_BLOCK_SIZE*6);

????/*初始化ctx*/
????ctx?=?EVP_CIPHER_CTX_new();

????/*指定加密算法及key和iv(此處IV沒有用)*/
??????????????????????
????ret?=?EVP_EncryptInit_ex(ctx?EVP_aes_128_ecb()?NULL?userkey?iv);
????if(ret?!=?1)?{
????????printf(“EVP_EncryptInit_ex?failed\n“);
????????exit(-1);
????}
????
????/*禁用padding功能*/
????EVP_CIPHER_CTX_set_padding(ctx?0);
????/*進行加密操作*/
????ret?=?EVP_EncryptUpdate(ctx?encrypt?&mlen?data?AES_BLOCK_SIZE*3);
????if(ret?!=?1)?{
????????printf(“EVP_EncryptUpdate?failed\n“);
????????exit(-1);
????}
????/*結束加密操作*/
????ret?=?EVP_EncryptFinal_ex(ctx?encrypt+mlen?&flen);
????if(ret?!=?1)?{
????????printf(“EVP_EncryptFinal_ex?failed\n“);
????????exit(-1);
????}

????tlen?=?mlen?+?flen;

????tlen?=?0;
????mlen?=?0;
????flen?=?0;

????EVP_CIPHER_CTX_cleanup(ctx);
????EVP_CIPHER_CTX_init(ctx);
?????
????ret?=?EVP_DecryptInit_ex(ctx?EVP_aes_128_ecb()?NULL?userkey?iv);
????if(ret?!=?1)?{
????????printf(“EVP_DecryptInit_ex?failed\n“);
????????exit(-1);
????}
????
????EVP_CIPHER_CTX_set_pa

評論

共有 條評論