亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kblock.cpp

?? 加密解密,安全工具!很有意思的代碼
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/******************************************************************* * *	Copyright (c) 1994-1999 Jetico, Inc., Finland *	All rights reserved. * *	File: kblock.cc *	Revision:  $Id: kblock.cpp,v 1.1 2005/05/12 09:51:39 crypt Rel-1.6-3 $ *	Created: *	Description: implementation of procedures to work with  *		Data Block that stores encryption keys * *******************************************************************/#include <stdlib.h>#include <malloc.h>#include <string.h>#include <bc_types.h>#include "kg_defs.h"#include "kg_misc.h"#include "kblock.h"#include "random.h"#include "sha256.h"#include "alg.h"char kblock_cpp[]="$Id: kblock.cpp,v 1.1 2005/05/12 09:51:39 crypt Rel-1.6-3 $";/* Forward declarations of local procedures */BOOL  CalculateDigest( BYTE *Data, DWORD Length, BYTE *Digest );BOOL  DataBlockVerifyDigest( DATA_BLOCK *DataBlock );BOOL  DataBlockUpdateDigest( DATA_BLOCK *DataBlock );BOOL  GetStorageKeyFromPassword( char *Password, BYTE *StorageKey );void  setAttribute( DWORD *AttBuffer, DWORD Attribute );DWORD getAttribute( DWORD AttBuffer );BOOL createAlternativeKeyBlock(                              DATA_BLOCK *DataBlock,                              ALG_SERV   Alg,                              DWORD      AlgKeyLength,                              BYTE       *Key,                              BYTE       *PoolBuffer                              );/********************************************************************** *  * DataBlockAllocate() - allocates memory for DATA_BLOCK structure  *                       and initializes the structure. * * The procedure which calls DataBlockAllocate() is responsible for  * releasing the memory with the DataBlockFree() function. * **********************************************************************/extern BOOL DataBlockAllocate(DATA_BLOCK **DataBlock,                               DWORD *DataSize,                               DWORD AlgId){    DATA_BLOCK  *db;    KEY_BLOCK   *kb;    int         i;    *DataSize = 0;    *DataBlock = (DATA_BLOCK *)malloc(sizeof(DATA_BLOCK));    if ( !(*DataBlock) ) return FALSE;    db = *DataBlock;    *DataSize = sizeof(DATA_BLOCK);    ShredData( (BYTE *)db, sizeof(DATA_BLOCK) ); /* fill DataBlock by random garbage */    strcpy( db->header.signature, SIGNATURE03 );//    strcpy( db->header.signature, SIGNATURE04 );    db->header.formatVersion = FORMAT_VERSION;    db->header.encrAlgorithmId = AlgId;    db->header.hashAlgorithmId = SHA256_ID;    db->header.dataBlockSize = sizeof(DATA_BLOCK);    db->header.keyBlockSize = sizeof(KEY_BLOCK);    db->header.keyBlockNumber = MAXIMUM_NUMBER_OF_KEYS;    setAttribute( &(db->header.state), STATE_POOL_NOT_INITIALIZED);    kb = db->keys;    for ( i=0; i<MAXIMUM_NUMBER_OF_KEYS; i++, kb++ )    {        setAttribute( &(kb->keyAttribute), KATTRIBUTE_KEY_EMPTY );    }    if ( DataBlockUpdateDigest( *DataBlock ) )        return TRUE;    DataBlockFree( DataBlock );    *DataSize = 0;    return FALSE;}/********************************************************************** *  * DataBlockFree() - wipes and frees DATA_BLOCK structure  * * The procedure which calls DataBlockAllocate() is responsible for  * releasing the memory with the DataBlockFree() function. * **********************************************************************/extern BOOL DataBlockFree( DATA_BLOCK **DataBlock ){    ShredData( (BYTE *)*DataBlock, sizeof(DATA_BLOCK) );    if ( *DataBlock ) free( *DataBlock);    *DataBlock = NULL;    return TRUE;}/********************************************************************** *  * DataBlockCheck() - verifies that DATA_BLOCK structure is not damaged *                    and checks that DATA_BLOCK stores at least  *                    KeysCount keys. * **********************************************************************/extern DWORD DataBlockCheck(                           DATA_BLOCK *DataBlock,                           DWORD      DataSize,                           DWORD      AlgId                           ){    if ( !DataBlock ) return ERROR_DAMAGED_DATA_BLOCK;    if ( DataBlock->header.formatVersion != FORMAT_VERSION )        return ERROR_INCORRECT_FORMAT_VERSION;    if ( (DataBlock->header.dataBlockSize != sizeof(DATA_BLOCK))         || (DataSize != sizeof(DATA_BLOCK)) )        return ERROR_INCORRECT_DATA_BLOCK_SIZE;    if (strcmp(DataBlock->header.signature, SIGNATURE98) &&         strcmp(DataBlock->header.signature, SIGNATURE03) &&        strcmp(DataBlock->header.signature, SIGNATURE04))        return ERROR_INCORRECT_BLOCK_SIGNATURE;    if ( DataBlock->header.encrAlgorithmId != AlgId )        return ERROR_INCORRECT_ENCR_ALGORITHM;    if ( DataBlock->header.hashAlgorithmId != SHA256_ID )        return ERROR_INCORRECT_HASH_ALGORITHM;    if ( !DataBlockVerifyDigest( DataBlock ) )        return ERROR_DAMAGED_DATA_BLOCK;    return ERROR_NO;}/********************************************************************** *  * DataBlockWriteKey() - fills a free KEY_BLOCK in the DataBlock. * **********************************************************************/extern DWORD DataBlockWriteKey(                              DATA_BLOCK *DataBlock,                              ALG_SERV   Alg,                              DWORD      AlgKeyLength,                              char *    Password,                              BYTE       *Key,                              DWORD      KeyAttribute,                              BYTE       *PoolBuffer                              ){    BYTE      storageKey[ MAXIMUM_KEY_SIZE_BYTES ];    DWORD     keyHandle;    KEY_BLOCK *kb, *kbFound;    BYTE iVector[ IVECTOR_LENGTH ];    /* find empty KEY_BLOCK inside DataBlock*/    kb = DataBlock->keys;    kbFound = NULL;    for ( int i=0; i<MAXIMUM_NUMBER_OF_KEYS; i++, kb++ )    {        if ( getAttribute(kb->keyAttribute) == KATTRIBUTE_KEY_EMPTY )        {            kbFound = kb;            break;        }    }    if ( !kbFound ) return ERROR_NOT_ENOUGH_SPACE_FOR_KEY;    /* copy encryption key to the KEY_BLOCK memory */    memcpy( kbFound->key, Key, MAXIMUM_KEY_SIZE_BYTES );    /* calculate digest of the key and save it in KEY_BLOCK */    if ( !CalculateDigest( kbFound->key, MAXIMUM_KEY_SIZE_BYTES,                            kbFound->digest ) )    {        ShredData( kbFound->key, MAXIMUM_KEY_SIZE_BYTES );        return ERROR_INVALID_ALGORITHM;    }    memcpy( iVector, kbFound->digest, IVECTOR_LENGTH );    /* Encrypt pool in the data block with the Key */    if ( getAttribute(DataBlock->header.state) == STATE_POOL_NOT_INITIALIZED )    {        /*  we must fill the PoolBuffer with zeros, because             the pool in the DataBlock we are going to encrypt             already contain random data */        memset( PoolBuffer, 0, POOL_SIZE_BYTES );        /* Load the Key to encryption algorithm module */        if ( alg_make_key (Alg, Key, AlgKeyLength, PoolBuffer, &keyHandle ) )        {            ShredData( iVector, IVECTOR_LENGTH);            return ERROR_INVALID_ALGORITHM;        }        /* Encrypt pool */        if ( alg_encrypt( Alg, keyHandle, iVector,                           DataBlock->pool, POOL_SIZE_BYTES ) )        {            alg_free_key( Alg, keyHandle );            ShredData( iVector, IVECTOR_LENGTH);            return ERROR_INVALID_ALGORITHM;        }        /* Erase and free the Key data from the encryption algorithm module */        alg_free_key( Alg, keyHandle );        setAttribute(&(DataBlock->header.state),STATE_POOL_INITIALIZED);    }    /*	We begin to encrypt file-container's encryption key         and its digest using storageKey.        First of all, calculate storageKey from the password     */    if ( !GetStorageKeyFromPassword( Password, storageKey ) )    {        ShredData( kbFound->key, MAXIMUM_KEY_SIZE_BYTES );        ShredData( kbFound->digest, MAXIMUM_DIGEST_SIZE_BYTES );        ShredData( iVector, IVECTOR_LENGTH);        return ERROR_INVALID_ALGORITHM;    }    /*	Load storageKey into the Algorithm driver and again,         the Pool must be filled by zeros, because we are going         to encrypt random data (Key) */    if ( alg_make_key (Alg, storageKey, AlgKeyLength, PoolBuffer, &keyHandle ) )    {        ShredData( storageKey, MAXIMUM_KEY_SIZE_BYTES );        ShredData( kbFound->key, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES);        ShredData( iVector, IVECTOR_LENGTH);        return ERROR_INVALID_ALGORITHM;    }    /* Now we don't need in storageKey, because it is copied to the       Algorithm Driver */    ShredData( storageKey, MAXIMUM_KEY_SIZE_BYTES );    /* encrypt the key and its digest copied to the KEY_BLOCK */    if ( alg_encrypt( Alg, keyHandle, iVector,                       kbFound->key, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES) )    {        alg_free_key( Alg, keyHandle );        ShredData( kbFound->key, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES);        ShredData( iVector, IVECTOR_LENGTH);        return ERROR_INVALID_ALGORITHM;    }    /* erase storageKey from the Algorithm driver memory */    alg_free_key( Alg, keyHandle );    ShredData( iVector, IVECTOR_LENGTH);    setAttribute( &(kbFound->keyAttribute), KeyAttribute );    /* Check if Alternative Key Block is initialized. If no, initialize it */    createAlternativeKeyBlock(  DataBlock, Alg, AlgKeyLength,Key, PoolBuffer );    if ( !DataBlockUpdateDigest( DataBlock ) )    {        setAttribute( &(kbFound->keyAttribute), KATTRIBUTE_KEY_EMPTY );        return ERROR_INTERNAL_PROBLEM;    }    return ERROR_NO;}DWORD DataBlockVerifyPasswordAndGetKey(                                      DATA_BLOCK *DataBlock,                                      ALG_SERV Alg,                                      DWORD      AlgKeyLength,                                      char *    Password,                                      BYTE       *Key,                                      BYTE       *PoolBuffer                                      ){    KEY_BLOCK *kb, *kbFound;    BYTE  storageKey[ MAXIMUM_KEY_SIZE_BYTES ];    BYTE  keyAndDigest[ MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES ];    BYTE  calculatedDigest[ MAXIMUM_DIGEST_SIZE_BYTES ];    DWORD keyHandle, i;    BYTE  iVector[ IVECTOR_LENGTH ];    kb = DataBlock->keys;    kbFound = NULL;    /*  we fill the PoolBuffer with zeros, because         the buffers in the DataBlock we are going to decrypt         contain random data */    /*	in the first part of the procedure we use the PoolBuffer        to initialize encryption algorithm module with zeroed pools.        In the second part we will place a correct decrypted pool         data to the PoolBuffer */    memset( PoolBuffer, 0, POOL_SIZE_BYTES );    for ( i=0; i<MAXIMUM_NUMBER_OF_KEYS; i++, kb++ )    {        if ( getAttribute(kb->keyAttribute) == KATTRIBUTE_KEY_EMPTY ) continue;        /* Calculate encryption key for decrypting KEY_BLOCK */        if ( !GetStorageKeyFromPassword( Password, storageKey ) )            return ERROR_INVALID_ALGORITHM;        /* Decrypt KEY_BLOCK kb */        /* First, load storageKey into the Algorithm driver */        if ( alg_make_key (Alg, storageKey, AlgKeyLength, PoolBuffer, &keyHandle ) )            return ERROR_INVALID_ALGORITHM;        /* Now we don't need in storageKey, because it is copied to the           Algorithm Driver */        ShredData( storageKey, MAXIMUM_KEY_SIZE_BYTES );        /* decrypt the key and its digest copied to the KEY_BLOCK */        memcpy( keyAndDigest, kb->key, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES );        /* initialize iVector with any value.           After first decrypting we will define it exactly */        memset( iVector, 0, IVECTOR_LENGTH );        /* first decryption */        if ( alg_decrypt( Alg, keyHandle, iVector,                           keyAndDigest, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES) )        {            alg_free_key( Alg, keyHandle );            ShredData( keyAndDigest, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES);            return ERROR_INVALID_ALGORITHM;        }        /* define Initial Vector */        memcpy( iVector, &(keyAndDigest[MAXIMUM_KEY_SIZE_BYTES]), IVECTOR_LENGTH );        /* second decryption with exact Initial Vector */        memcpy( keyAndDigest, kb->key, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES );        if ( alg_decrypt( Alg, keyHandle, iVector,                           keyAndDigest, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES) )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线一区二区| 色综合久久综合网97色综合| 福利一区福利二区| 欧美手机在线视频| 国产精品素人一区二区| 美腿丝袜在线亚洲一区| 91麻豆精品视频| 久久久不卡网国产精品一区| 日韩中文字幕区一区有砖一区| www.久久久久久久久| 精品盗摄一区二区三区| 午夜av区久久| 欧美三级电影在线看| 中文字幕一区免费在线观看| 国精产品一区一区三区mba桃花| 欧美日韩激情一区二区三区| 亚洲日本va午夜在线影院| 国产一区999| 久久综合精品国产一区二区三区| 日本免费在线视频不卡一不卡二| 97精品电影院| 国产精品久久久久影院| 国产成人午夜片在线观看高清观看| 欧美一区二区三区色| 午夜久久福利影院| 欧美综合在线视频| 一区av在线播放| 91久久精品网| 一区二区视频在线| 91亚洲精品乱码久久久久久蜜桃| 中文字幕亚洲电影| 91在线精品一区二区| 亚洲欧美国产77777| 色婷婷综合久久久中文一区二区| 17c精品麻豆一区二区免费| 9i看片成人免费高清| 中文字幕一区二区三区在线播放| 国产成人综合视频| 国产精品黄色在线观看| 99久久精品免费看国产 | 国产精品久久久久久妇女6080 | 成人av电影在线| 亚洲丝袜另类动漫二区| 91蜜桃免费观看视频| 一区二区三区精密机械公司| 在线不卡中文字幕| 蜜臀a∨国产成人精品| 久久久久久免费| 成人国产精品免费观看视频| 亚洲三级理论片| 欧美精品久久一区二区三区| 蜜桃视频一区二区三区在线观看| 久久久噜噜噜久久人人看| 99免费精品视频| 日韩福利电影在线| 26uuu亚洲综合色| 色婷婷综合久久久中文字幕| 日韩av一区二区在线影视| 久久精品日产第一区二区三区高清版 | 亚洲精品美腿丝袜| 欧美精品电影在线播放| 国产麻豆视频一区| 一区二区三区四区国产精品| 91精品婷婷国产综合久久| 国产91综合网| 午夜精品免费在线观看| 久久网站最新地址| 91久久精品一区二区| 国内成人自拍视频| 亚洲午夜成aⅴ人片| 久久精品视频在线免费观看| 欧美三级乱人伦电影| 国产盗摄视频一区二区三区| 午夜精品一区在线观看| 欧美国产精品久久| 日韩欧美一卡二卡| 91热门视频在线观看| 看片的网站亚洲| 亚洲一区二区三区影院| 久久久99精品免费观看不卡| 欧美日本免费一区二区三区| 成人黄色在线看| 国内久久婷婷综合| 午夜电影一区二区三区| 亚洲人亚洲人成电影网站色| 久久精品视频免费观看| 91精品国产品国语在线不卡| 99精品视频一区二区三区| 国精产品一区一区三区mba桃花| 亚洲一区二区在线视频| 国产精品久久久久久久久久久免费看 | 首页国产欧美日韩丝袜| 依依成人综合视频| 17c精品麻豆一区二区免费| 国产午夜精品福利| 欧美大片一区二区| 在线播放视频一区| 在线看国产一区| 91视频在线看| 99精品国产视频| 国产成人一区二区精品非洲| 国产真实乱对白精彩久久| 免费成人在线播放| 亚洲电影在线播放| 亚洲综合色视频| 一区二区视频免费在线观看| 亚洲欧美二区三区| 自拍视频在线观看一区二区| 日本一区二区电影| 国产日韩欧美综合一区| 久久久噜噜噜久噜久久综合| 久久精品夜色噜噜亚洲aⅴ| 精品成人佐山爱一区二区| 欧美xxxxx牲另类人与| 日韩美女一区二区三区四区| 日韩欧美综合一区| 精品免费视频一区二区| 久久久亚洲综合| 久久久www成人免费无遮挡大片 | 亚洲色图在线视频| 中文一区在线播放| 18欧美亚洲精品| 亚洲午夜在线视频| 亚洲v日本v欧美v久久精品| 亚洲成人动漫一区| 日产国产欧美视频一区精品| 久久99热国产| 粉嫩欧美一区二区三区高清影视| thepron国产精品| 欧美天堂亚洲电影院在线播放 | www.视频一区| 日本高清不卡一区| 欧美高清视频在线高清观看mv色露露十八| 欧美三级一区二区| 日韩欧美国产综合| 久久精品人人爽人人爽| 亚洲婷婷综合久久一本伊一区| 亚洲精品欧美综合四区| 丝袜a∨在线一区二区三区不卡 | 日韩不卡一二三区| 国产一区二区三区黄视频 | 丁香另类激情小说| 欧美在线播放高清精品| 日韩午夜精品视频| 国产精品污网站| 午夜伦理一区二区| 成人一级黄色片| 在线不卡一区二区| 国产精品久久久久三级| 视频一区二区三区中文字幕| 狠狠色丁香久久婷婷综合_中 | 欧美精品一级二级三级| 欧美韩国一区二区| 五月激情综合婷婷| www.日韩大片| 日韩你懂的在线观看| 亚洲精选视频在线| 韩国在线一区二区| 欧美日韩日本视频| 国产精品福利一区| 日韩和欧美一区二区| 91一区二区在线| 久久这里都是精品| 午夜电影一区二区三区| 91免费视频观看| 精品99久久久久久| 亚洲一区二区三区四区在线| 久久精品国产77777蜜臀| 欧美吻胸吃奶大尺度电影| 国产日韩欧美精品在线| 日韩福利视频导航| 在线免费观看日本欧美| 国产精品欧美一级免费| 免费成人在线观看视频| 欧美少妇bbb| 国产精品国产精品国产专区不片| 美女一区二区久久| 欧美肥大bbwbbw高潮| 怡红院av一区二区三区| 不卡的电影网站| 久久久久久久性| 另类小说图片综合网| 6080亚洲精品一区二区| 亚洲国产精品久久艾草纯爱| 91麻豆精品视频| 亚洲精选视频免费看| 成人a级免费电影| 国产视频911| 国产精品1024| 久久免费午夜影院| 国产精品资源站在线| 久久综合久久综合亚洲| 久久99国产精品免费网站| 日韩一级大片在线观看| 日韩黄色一级片| 日韩免费一区二区| 久久精品国产77777蜜臀| 精品久久久久久久久久久久包黑料 | 亚洲男帅同性gay1069| 99热在这里有精品免费|