• <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 星綻紫輝 閱讀(483) 評論(0)  編輯 收藏 引用
            国产欧美久久一区二区| 久久久久久狠狠丁香| 99久久夜色精品国产网站| 伊人久久大香线蕉综合Av | 久久99精品国产麻豆宅宅| 国产成人久久777777| 色欲综合久久中文字幕网| 99久久人人爽亚洲精品美女| 久久亚洲AV无码精品色午夜麻豆 | 狠狠综合久久综合88亚洲 | 欧美精品国产综合久久| 精品一区二区久久久久久久网站| 久久一区二区三区99| 精品国产91久久久久久久| 久久亚洲精品无码aⅴ大香| 久久se精品一区二区影院| 国产精品久久99| 亚洲精品蜜桃久久久久久| 人妻无码久久精品| 久久久久久亚洲精品无码| 欧美综合天天夜夜久久| 久久精品麻豆日日躁夜夜躁| 一本色道久久综合亚洲精品| 亚洲精品无码久久不卡| 久久精品免费大片国产大片| 日韩精品国产自在久久现线拍| 99久久精品国产一区二区| 国内精品伊人久久久久妇| 久久久久亚洲?V成人无码| 精品久久人人爽天天玩人人妻| 国产99久久久久久免费看| 久久青草国产精品一区| 办公室久久精品| 狠狠色丁香婷婷综合久久来来去 | 亚洲中文字幕无码一久久区| 性做久久久久久免费观看| 亚洲人成无码久久电影网站| 亚洲国产成人久久综合区| 久久精品无码一区二区WWW| 亚洲午夜久久久久久久久久| 久久久久久午夜成人影院|