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

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

?? kblock.cpp

?? 加密解密,安全工具!很有意思的代碼
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
    alg_free_key( Alg, keyHandle );    return ERROR_NO;}DWORD DataBlockVerifyPasswordAndGetKey_Hidden(                                             DATA_BLOCK *DataBlock,                                             ALG_SERV   Alg,                                             DWORD      AlgKeyLength,                                             char       *Password,                                             BYTE       *Key,                                             BYTE       *PoolBuffer,                                             DWORD      *Offset,                                             DWORD      *BusyMask,                                             DWORD      *KeyBlockPositionMask                                             ){    KEY_BLOCK *kbFound;    int       i;    DWORD     dwRes;    dwRes = ERROR_INCORRECT_PASSWORD;    for ( i = MAXIMUM_NUMBER_OF_KEYS - 1;  i>0;  i-- )    {        kbFound = &(DataBlock->keys[i]);        if ( getAttribute(kbFound->keyAttribute) != KATTRIBUTE_KEY_EMPTY ) continue;        dwRes = localDataBlockVerifyPasswordAndGetKey_Hidden( DataBlock, kbFound,                                                              Alg, Alg.alg_id, AlgKeyLength, Password, Key,                                                              PoolBuffer, Offset, BusyMask );        if ( dwRes == ERROR_NO )        {            *KeyBlockPositionMask = 1 << i;            return ERROR_NO;        }    }    return dwRes;}/******************************************************* * * DataBlock_CheckFreeSpaceForNewPassword() * - check - can we add new password to container? * *******************************************************/DWORD DataBlock_CheckFreeSpaceForNewPassword( DATA_BLOCK *DataBlock ){    KEY_BLOCK *kb, *kbFound;    /* 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;    return ERROR_NO;}/******************************************************* * * DataBlockAddPassword() * - add new password to container * *******************************************************/DWORD DataBlockAddPassword( DATA_BLOCK **DataBlock,                            DWORD      *DataSize,                            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;        }    }    memset( PoolBuffer, 0, POOL_SIZE_BYTES );    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 );    /*	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;}/******************************************************* * * DataBlockAddPassword_Hidden() * - add new password for hidden part of container * *******************************************************/DWORD DataBlockAddPassword_Hidden(                                 DATA_BLOCK **DataBlock,                                 DWORD      *DataSize,                                 ALG_SERV    Alg,                                 DWORD      AlgKeyLength,                                 char       *Password,                                 BYTE       *Key,                                 DWORD      KeyAttribute, // in the current release we don't use the parameter                                 BYTE       *PoolBuffer,                                 DWORD      Offset,                                 DWORD      *BusyMask                                 ){    createAlternativeKeyBlock( *DataBlock, Alg, AlgKeyLength, Key, PoolBuffer );    return DataBlockWriteKey_Hidden( *DataBlock, Alg, AlgKeyLength,                                     Password, Key, KeyAttribute, PoolBuffer,                                      Offset, BusyMask, HIDDEN_POSITION_ANY );}/******************************************************* * * DataBlockRemoveAdditionalPassword() * - removes additional password for container * *******************************************************/DWORD DataBlockRemoveAdditionalPassword(                                       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) )        {            alg_free_key( Alg, keyHandle );            ShredData( keyAndDigest, 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 );        /* calculate digest of the key and compare it with digest */        if ( !CalculateDigest( keyAndDigest, MAXIMUM_KEY_SIZE_BYTES,                                calculatedDigest ) )        {            ShredData( keyAndDigest, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES);            ShredData( iVector, IVECTOR_LENGTH);            return ERROR_INVALID_ALGORITHM;        }        if ( memcmp( calculatedDigest,                      &(keyAndDigest[MAXIMUM_KEY_SIZE_BYTES]),                      SHA256_DIGEST_SIZE) == 0 )        {            kbFound = kb;            break;        }    }    if ( !kbFound )    {        ShredData( iVector, IVECTOR_LENGTH);        return ERROR_INCORRECT_PASSWORD;    }    ShredData( keyAndDigest, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES);    if ( i == 0 )    {        return ERROR_MASTER_PASSWORD_ENTERED;    }    memcpy( kbFound, keyAndDigest, MAXIMUM_KEY_SIZE_BYTES + MAXIMUM_DIGEST_SIZE_BYTES );    kbFound->keyAttribute = KATTRIBUTE_KEY_EMPTY;    memcpy( Key, keyAndDigest, MAXIMUM_KEY_SIZE_BYTES );    if ( !DataBlockUpdateDigest( DataBlock ) )    {        return ERROR_INTERNAL_PROBLEM;    }    return ERROR_NO;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av不卡一区二区| 国产精品嫩草影院com| 舔着乳尖日韩一区| 9191成人精品久久| 日韩国产在线观看一区| 4438x亚洲最大成人网| 麻豆91在线看| 国产人久久人人人人爽| 色素色在线综合| 久久精品欧美一区二区三区麻豆| 国产精品中文欧美| 亚洲一二三级电影| 日韩精品一区二区三区三区免费 | 久久99久久99精品免视看婷婷| 亚洲精品一区二区三区四区高清| 国产成人精品免费在线| 综合激情成人伊人| 欧美一区二区视频在线观看2022 | 亚洲六月丁香色婷婷综合久久| 91美女精品福利| 日韩av一级电影| 国产喷白浆一区二区三区| 日本道色综合久久| 精品一区二区三区免费播放| 亚洲欧美激情视频在线观看一区二区三区 | 欧美三级日韩在线| 国产一区二区三区黄视频 | 精品国产一区二区精华 | 欧美性受xxxx黑人xyx| 久久精品二区亚洲w码| ...xxx性欧美| 精品精品国产高清a毛片牛牛 | 国产性天天综合网| 欧美日韩三级在线| 成人99免费视频| 奇米影视在线99精品| 亚洲免费观看视频| 国产日韩三级在线| 日韩免费视频一区| 欧美亚洲免费在线一区| 国产91丝袜在线播放0| 婷婷国产v国产偷v亚洲高清| 亚洲色图视频网| 久久久久九九视频| 欧美一区二区在线观看| 在线亚洲一区二区| 成人免费毛片高清视频| 久久av资源网| 免费精品视频在线| 亚洲成人午夜影院| 亚洲欧洲综合另类| 欧美国产欧美综合| 2017欧美狠狠色| 欧美一区二区私人影院日本| 在线日韩av片| 91在线看国产| 成人app下载| 国产不卡视频一区| 国产在线播精品第三| 日韩高清不卡在线| 亚洲成av人片在www色猫咪| 亚洲欧洲日本在线| 中文字幕第一区第二区| 国产欧美一区二区精品秋霞影院| 日韩精品一区二区在线| 日韩一级在线观看| 制服丝袜在线91| 制服视频三区第一页精品| 欧美色男人天堂| 欧美视频中文字幕| 欧美这里有精品| 在线观看av不卡| 在线区一区二视频| 欧美亚洲日本国产| 欧美丰满美乳xxx高潮www| 欧美日韩免费观看一区三区| 欧美日韩一区二区电影| 91精品办公室少妇高潮对白| 色一情一乱一乱一91av| 色婷婷国产精品综合在线观看| 91在线观看下载| 日本韩国欧美一区| 欧美性猛交一区二区三区精品| 欧美在线不卡视频| 欧美日产国产精品| 日韩色视频在线观看| 精品国产欧美一区二区| 国产亚洲视频系列| 亚洲人成亚洲人成在线观看图片| 亚洲男同1069视频| 日韩成人精品视频| 国模无码大尺度一区二区三区| 国产成人精品影院| 色网站国产精品| 在线成人午夜影院| 久久精品亚洲一区二区三区浴池| 国产精品成人网| 亚洲一区在线视频| 激情综合五月婷婷| 99久久精品国产一区二区三区| 在线观看国产精品网站| 欧美一级黄色录像| 亚洲国产成人私人影院tom| 亚洲宅男天堂在线观看无病毒| 五月婷婷激情综合| 国产激情视频一区二区三区欧美 | 成人午夜免费av| 日本久久电影网| 日韩免费在线观看| 亚洲欧美综合在线精品| 偷窥国产亚洲免费视频| 国产在线不卡一卡二卡三卡四卡| 99re这里都是精品| 日韩一级高清毛片| 中文字幕一区二区三区不卡在线 | 欧美性色欧美a在线播放| 777欧美精品| 中文字幕在线视频一区| 天天爽夜夜爽夜夜爽精品视频| 国产一区二区精品在线观看| 色综合激情五月| 欧美va亚洲va国产综合| 亚洲色图丝袜美腿| 国产原创一区二区| 欧美色视频一区| 中文字幕 久热精品 视频在线| 亚洲电影视频在线| 成人av在线资源| 欧美一区二区女人| 亚洲免费av高清| 国产不卡视频一区二区三区| 欧美一区二区三区小说| 亚洲欧洲综合另类| 高清成人免费视频| 日韩欧美在线综合网| 亚洲精品午夜久久久| 国产精品一区久久久久| 亚洲国产高清aⅴ视频| 日本三级亚洲精品| 91国偷自产一区二区三区观看| 久久精品综合网| 黄网站免费久久| 在线播放欧美女士性生活| 亚洲精品国久久99热| 国产**成人网毛片九色 | 国产精品一区二区男女羞羞无遮挡| 日本韩国欧美三级| 亚洲欧美另类图片小说| 成人午夜在线视频| 亚洲国产成人自拍| 国产 日韩 欧美大片| 久久精品人人做人人综合| 激情五月激情综合网| 欧美一区二区三区视频在线观看| 亚洲一区二区三区视频在线| 日本韩国精品在线| 一区二区三区在线免费| 91丨porny丨在线| 亚洲特黄一级片| 99精品欧美一区二区三区小说 | 69av一区二区三区| 亚洲一区在线观看免费| 一本色道久久综合狠狠躁的推荐| 国产精品久久久久久福利一牛影视| 国产成人综合视频| 久久精品夜色噜噜亚洲a∨ | 91热门视频在线观看| 一区在线观看免费| 91日韩在线专区| 亚洲伊人伊色伊影伊综合网| 色综合欧美在线| 亚洲宅男天堂在线观看无病毒| 欧美做爰猛烈大尺度电影无法无天| 亚洲欧美日韩电影| 欧美日韩激情一区| 蜜臀av性久久久久蜜臀av麻豆| 精品入口麻豆88视频| 国产一二三精品| 国产精品成人免费精品自在线观看| 99re8在线精品视频免费播放| 亚洲黄色在线视频| 欧美日韩国产一区| 另类中文字幕网| 国产精品视频一区二区三区不卡| av午夜一区麻豆| 亚洲成人自拍偷拍| 日韩精品一区二区三区在线观看 | 亚洲私人黄色宅男| 欧美日韩国产乱码电影| 日韩二区在线观看| 国产三级三级三级精品8ⅰ区| 91热门视频在线观看| 日韩高清在线电影| 国产亚洲精品免费| 在线亚洲一区二区| 精品一区二区免费视频| 1000部国产精品成人观看| 欧美久久一二三四区| 国产乱码精品一区二区三区五月婷| 国产精品乱人伦|