• <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

            快樂地學(xué)習(xí),快樂地工作!

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

            常用鏈接

            留言簿(5)

            我參與的團(tuán)隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

                    

                  原創(chuàng):星綻紫輝 轉(zhuǎn)載請注明出處,3Q Very Much!    http://www.shnenglu.com/rawdata

                  
                  我寫的MD5和RC4加密緩沖區(qū)函數(shù),其原始代碼借鑒
                  www.microsoft.com 網(wǎng)站上的文章

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


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


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


                   http://www.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    //創(chuàng)建散列
             43    if(!CryptCreateHash(initkey.hCryptProv,CALG_MD5,0,0,&initkey.hHash))
             44        return;
             45
             46    //生成密鑰數(shù)據(jù)
             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    //創(chuàng)建散列表
             68    if(!CryptCreateHash(initkey.hCryptProv,CALG_MD5,0,0,&initkey.hHash))
             69        return;
             70
             71    //創(chuàng)建解密數(shù)據(jù)
             72    if(!CryptHashData(initkey.hHash,(BYTE *)pbyPassword,dwPwdLen,0))
             73        return;
             74
             75    //生成解密數(shù)據(jù)
             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://www.shnenglu.com/rawdata

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


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


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

                  
            posted on 2008-12-30 10:35 星綻紫輝 閱讀(474) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久久久久综合网天天| 亚洲AV成人无码久久精品老人| 久久精品国产亚洲Aⅴ香蕉| 国产成人精品久久一区二区三区av| 久久精品国产亚洲AV不卡| 少妇熟女久久综合网色欲| 国产∨亚洲V天堂无码久久久| 久久r热这里有精品视频| 色综合久久中文字幕综合网| 久久青青草原精品国产| 国内精品久久久久久久亚洲| 亚洲AV日韩精品久久久久久| 很黄很污的网站久久mimi色| 青草国产精品久久久久久| 久久无码一区二区三区少妇| 久久ZYZ资源站无码中文动漫| 欧美久久一区二区三区| 久久精品国产99国产电影网| 久久国内免费视频| 久久精品中文字幕有码| 国内精品久久人妻互换 | 久久精品一区二区三区不卡| 久久国产成人| 久久精品视频网| 无码伊人66久久大杳蕉网站谷歌| 国产一区二区精品久久凹凸 | 99久久精品费精品国产一区二区| 亚洲国产成人精品91久久久| 亚洲成人精品久久| 久久一日本道色综合久久| 久久人妻无码中文字幕| 老司机午夜网站国内精品久久久久久久久| 国产精品美女久久久m| 色婷婷久久综合中文久久蜜桃av| 思思久久99热只有频精品66| 久久久久人妻一区精品| 久久国产综合精品五月天| 国产亚洲色婷婷久久99精品91 | 久久精品国产亚洲Aⅴ香蕉 | av无码久久久久久不卡网站| 久久久亚洲欧洲日产国码aⅴ|