• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            星綻紫輝(rawdata)的Blog

            快樂地學習,快樂地工作!

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              16 Posts :: 0 Stories :: 37 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(5)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

                    

                  原創:星綻紫輝 轉載請注明出處,3Q Very Much!    http://m.shnenglu.com/rawdata

                  
                  我寫的MD5和RC4加密緩沖區函數,其原始代碼借鑒
                  www.microsoft.com 網站上的文章

                  這種加密函數是引用Windows內部維護的CSP數據庫的,是機器相關的,換句話說,你只有在同一臺機器上才能對它進行加密解密。加密前,你給一個私鑰字符串,就可以加密和解密緩沖區了。也可以稍加修改用來加密解密文件。


                  其實,里面的步驟是死的,至于為什么這么做,這是這些API編寫者對API應用者要求的必須遵循的調用規則,如果你想獲得更為詳盡的信息,可以在微軟的網站上找到有關CSP和Encryt/Decrypt API的資料。


                 下面貼出完整的源代碼:
                  (呵呵,順便說一句,我是支持開源的。這對于加速軟件技術研究是有幫助的,我期待著高智能機器人時代的快速來臨,我希望有健全完整的共享知識庫,我也希望發達健全的軟件系統能有一個質的飛躍。)


                   http://m.shnenglu.com/rawdata
                  
              1
              2#pragma once
              3
              4#include <tchar.h>
              5#include <stdio.h>
              6#include <windows.h>
              7#include <wincrypt.h>
              8
              9#pragma comment (lib, "advapi32")
             10
             11#define KEYLENGTH  0x00800000
             12#define ENCRYPT_ALGORITHM CALG_RC4 
             13#define ENCRYPT_BLOCK_SIZE 8 
             14
             15
             16//---------------------------------------------------------------------------------------
             17
             18#pragma pack(push,1)
             19struct DEFKEY
             20{
             21    HCRYPTPROV hCryptProv; 
             22    HCRYPTKEY hKey;
             23    HCRYPTHASH hHash; 
             24    DEFKEY()
             25    {
             26        hCryptProv = NULL;
             27        hKey = NULL;
             28        hHash = NULL;
             29    }

             30}
            ;
             31#pragma pack(pop)
             32
             33//--------------------------------------------------------------------------------------
             34
             35//初始化Key
             36void InitEncrypt(DEFKEY& initkey,BYTE* pbyPassword,DWORD dwPwdLen)
             37{
             38    //請求CSP
             39    if(!CryptAcquireContext( &initkey.hCryptProv, NULL,MS_ENHANCED_PROV,PROV_RSA_FULL,0))
             40        return;
             41
             42    //創建散列
             43    if(!CryptCreateHash(initkey.hCryptProv,CALG_MD5,0,0,&initkey.hHash))
             44        return;
             45
             46    //生成密鑰數據
             47    if(!CryptHashData(initkey.hHash,pbyPassword,dwPwdLen,0))
             48        return;
             49
             50    //生成密鑰(密鑰長度,密鑰算法)
             51    if(!CryptDeriveKey(initkey.hCryptProv,ENCRYPT_ALGORITHM,initkey.hHash,KEYLENGTH,&initkey.hKey))
             52        return;
             53
             54}

             55
             56
             57//------------------------------------------------------------------------------------------------
             58void InitDecrypt(DEFKEY& initkey,BYTE* pbyPassword,DWORD dwPwdLen)
             59{
             60    //是否是加密尾部塊
             61    bool fReturn = false;
             62
             63    //請求CSP
             64    if(!CryptAcquireContext(&initkey.hCryptProv,NULL,MS_ENHANCED_PROV,PROV_RSA_FULL,0))
             65        return;
             66    
             67    //創建散列表
             68    if(!CryptCreateHash(initkey.hCryptProv,CALG_MD5,0,0,&initkey.hHash))
             69        return;
             70
             71    //創建解密數據
             72    if(!CryptHashData(initkey.hHash,(BYTE *)pbyPassword,dwPwdLen,0))
             73        return;
             74
             75    //生成解密數據
             76    if(!CryptDeriveKey(initkey.hCryptProv,ENCRYPT_ALGORITHM,
             77        initkey.hHash,KEYLENGTH,&initkey.hKey))
             78        return;
             79}

             80
             81//-----------------------------------------------------------------------------------
             82void ReleaseCrypt(DEFKEY& initkey)
             83{
             84     if(initkey.hHash) 
             85    {
             86        CryptDestroyHash(initkey.hHash);
             87        initkey.hHash = NULL;
             88    }

             89
             90    if(initkey.hKey)
             91      CryptDestroyKey(initkey.hKey);
             92
             93    if(initkey.hCryptProv)
             94        CryptReleaseContext(initkey.hCryptProv, 0);
             95}

             96
             97//-------------------------------------------------------------------------------------
             98
             99
            100bool EncryptBuffer(BYTE* pbyInputBuf, DWORD dwInputLen,
            101                   DWORD dwBufLen,HCRYPTKEY hKey,BOOL bEnd);
            102
            103
            104bool DecryptBuffer(BYTE* pbyInputBuf, DWORD dwInputLen,
            105                   DWORD dwBufLen,HCRYPTKEY hKey,BOOL bEnd);
            106
            107
            108//---------------------------------------------------------------------------------------
            109bool EncryptBuffer(BYTE* pbyInputBuf, DWORD dwInputLen,
            110                   DWORD dwBufLen,HCRYPTKEY hKey,BOOL bEnd)
            111
            112    DWORD dwCount = dwInputLen;
            113    CryptDecrypt(hKey,0,bEnd,0,pbyInputBuf,&dwCount);
            114    return 1;
            115}
             
            116
            117
            118
            119
            120bool DecryptBuffer(BYTE* pbyInputBuf, DWORD dwInputLen,
            121                   DWORD dwBufLen,HCRYPTKEY hKey,BOOL bEnd)
            122
            123    DWORD dwCount = dwInputLen;
            124    CryptDecrypt(hKey,0,bEnd,0,pbyInputBuf,&dwCount);
            125    return 1;
            126}

                  http://m.shnenglu.com/rawdata

                如果代碼有什么謬誤或者有更好的解決方案,請留言或者EmailToMe: xiaolu69soft@yahoo.com.cn.


                 讓我們一起努力, 讓軟件技術和電子機械技術的高能時代快快來臨吧!!!


                  ^_~         2008-12-30   星綻紫輝

                  
            posted on 2008-12-30 10:35 星綻紫輝 閱讀(477) 評論(0)  編輯 收藏 引用
            亚洲精品高清久久| 久久偷看各类wc女厕嘘嘘| 国产午夜久久影院| 久久青青草原综合伊人| 国产2021久久精品| 麻豆久久久9性大片| 999久久久免费精品国产| 久久99国产精品久久99| 中文字幕无码久久久| 久久精品www人人爽人人| 精品国产综合区久久久久久| 欧美日韩久久中文字幕| 久久精品国产99国产精偷| 日本欧美国产精品第一页久久| 久久精品国产99国产精品导航| 国产精品久久国产精品99盘 | 国产精品久久久久影院色| 精品国产综合区久久久久久 | 国产91色综合久久免费| 日本精品久久久久影院日本 | 久久综合亚洲色一区二区三区| 亚洲人成精品久久久久| 精品国产乱码久久久久久浪潮 | 一本一本久久a久久精品综合麻豆| 亚洲伊人久久大香线蕉综合图片| 久久国产视屏| 曰曰摸天天摸人人看久久久| 久久久噜噜噜久久熟女AA片 | 久久99精品久久久久久不卡| 久久香蕉超碰97国产精品 | 国产一区二区精品久久岳| 亚洲精品无码久久久影院相关影片| 大蕉久久伊人中文字幕| 国产精品一久久香蕉产线看| 久久精品国产精品亚洲精品| 一本色综合久久| 欧美大战日韩91综合一区婷婷久久青草| 国产精品岛国久久久久| 97久久天天综合色天天综合色hd| 久久精品人妻中文系列| 久久久久国产精品人妻|