按位取反对汉字可以吗?我下载了一个md5(包括global.h,md5.h,md5c.c,mddrive.c)将其加到我的工程里,编译出错“fatal error C1010: unexpected end of file while looking for precompiled header directive”
我还试了其它的加密方法,都是如此,请问我哪儿错了吗?

解决方案 »

  1.   

    “fatal error C1010: unexpected end of file while looking for precompiled header directive”是说预编译头错误,有两种解决方法:
    1。关闭预编译选项,vc6好像在project|setting中
    2。尝试加上,在cpp前面加上include "stdafx.h",不过可能会引起其他问题。
      

  2.   

    我的编译通过了,我用的是rijndael加密方式。
    请问我怎样使用它来加密呢?
    rijndael 包含
    1.void rijndael::decrypt(const u1byte in_blk[16], u1byte out_blk[16])
    2.void rijndael::encrypt(const u1byte in_blk[16], u1byte out_blk[16])
    3.char *rijndael::name(void)
    4.void rijndael::set_key(const u1byte in_key[], const u4byte key_len)
      

  3.   

    谁有加密的例子。可以给我一个吗?谢谢了
    着急用,希望大家关注
    [email protected]
      

  4.   

    贴给你一个我的实验加密 的函数#include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <windows.h>
    #include <wincrypt.h>#ifdef USE_BLOCK_CIPHER
    #define ENCRYPT_ALGORITHM CALG_RC2
    #define ENCRYPT_BLOCK_SIZE 8
    #else
    #define ENCRYPT_ALGORITHM CALG_RC4
    #define ENCRYPT_BLOCK_SIZE 1
    #endif//advapi32.lib
    #define POINTNUM 50/*szSource为要加密的文件名称,szDestination为加密过的文件名称,szPassword为加密口令*/
    void CAPIEncryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword)
    {
    FILE *hSource = NULL;
    FILE *hDestination = NULL;
    INT eof = 0;
    HCRYPTPROV hProv = 0;
    HCRYPTKEY hKey = 0;
    HCRYPTKEY hXchgKey = 0;
    HCRYPTHASH hHash = 0;
    PBYTE pbKeyBlob = NULL;
    DWORD dwKeyBlobLen;
    PBYTE pbBuffer = NULL;
    DWORD dwBlockLen;
    DWORD dwBufferLen;
    DWORD dwCount; hSource= fopen(szSource,"rb");// 打开源文件
    hDestination = fopen(szDestination,"wb") ;//.打开目标文件
    // 连接缺省的CSP
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
    if(szPassword == NULL) {
    //口令为空,使用随机产生的会话密钥加密
    // 产生随机会话密钥。
    CryptGenKey(hProv, ENCRYPT_ALGORITHM, CRYPT_EXPORTABLE, &hKey);
    // 取得密钥交换对的公共密钥
    CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hXchgKey);
    // 计算隐码长度并分配缓冲区
    CryptExportKey(hKey, hXchgKey, SIMPLEBLOB, 0, NULL, &dwKeyBlobLen);
    pbKeyBlob=malloc(dwKeyBlobLen);//) == NULL) ;
    // 将会话密钥输出至隐码
    CryptExportKey(hKey, hXchgKey, SIMPLEBLOB, 0, pbKeyBlob, &dwKeyBlobLen);
    // 释放密钥交换对的句柄
    CryptDestroyKey(hXchgKey);
    hXchgKey = 0;
    // 将隐码长度写入目标文件
    fwrite(&dwKeyBlobLen, sizeof(DWORD), 1, hDestination);
    //将隐码长度写入目标文件
    fwrite(pbKeyBlob,1,dwKeyBlobLen, hDestination);
    free(pbKeyBlob);
    }
    else 
    {
    //口令不为空, 使用从口令派生出的密钥加密文件
    CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);// 建立散列表
    CryptHashData(hHash, szPassword,
    strlen(szPassword), 0); //散列口令
    // 从散列表中派生密钥
    CryptDeriveKey(hProv, ENCRYPT_ALGORITHM, hHash, 0, &hKey);
    // 删除散列表
    CryptDestroyHash(hHash);
    hHash = 0;
    }
    //计算一次加密的数据字节数,必须为ENCRYPT_BLOCK_SIZE的整数倍
    dwBlockLen = 1000 - 1000 % ENCRYPT_BLOCK_SIZE;
    //如果使用块编码,则需要额外空间
    if(ENCRYPT_BLOCK_SIZE > 1) {
    dwBufferLen=dwBlockLen + ENCRYPT_BLOCK_SIZE;
    } else {
    dwBufferLen = dwBlockLen;
    }
    //分配缓冲区
    pbBuffer = malloc(dwBufferLen);
    //加密源文件并写入目标文件
    do {
    // 从源文件中读出dwBlockLen个字节
    dwCount = fread(pbBuffer, 1, dwBlockLen, hSource);
    eof = feof(hSource);
    //加密数据
    CryptEncrypt(hKey, 0, eof, 0, pbBuffer, &dwCount, dwBufferLen);
    // 将加密过的数据写入目标文件
    fwrite(pbBuffer, 1, dwCount, hDestination);
    } while(!feof(hSource)); //关闭文件、释放内存
    printf("OK\n");
    free(pbBuffer);
    fclose(hSource);
    fclose(hDestination);
    }void CAPIDecryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword)
    {
    FILE *hSource = NULL;
    FILE *hDestination = NULL;
    INT eof = 0;
    HCRYPTPROV hProv = 0;
    HCRYPTKEY hKey = 0;
    HCRYPTKEY hXchgKey = 0;
    HCRYPTHASH hHash = 0;
    PBYTE pbKeyBlob = NULL;
    DWORD dwKeyBlobLen;
    PBYTE pbBuffer = NULL;
    DWORD dwBlockLen;
    DWORD dwBufferLen;
    DWORD dwCount;
    hSource= fopen(szSource,"rb");// 打开源文件
    hDestination = fopen(szDestination,"wb") ;//.打开目标文件
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0);
    if(szPassword == NULL) 
    {
    // 口令为空,使用存储在加密文件中的会话密钥解密
    // 读隐码的长度并分配内存
    fread(&dwKeyBlobLen,sizeof(DWORD),1,hSource);
    pbKeyBlob=malloc(dwKeyBlobLen);//)== NULL);
    // 从源文件中读隐码.
    fread(pbKeyBlob, 1, dwKeyBlobLen, hSource);
    // 将隐码输入CSP
    CryptImportKey(hProv, pbKeyBlob, dwKeyBlobLen, 0, 0, &hKey);
    free(pbKeyBlob);
    } else {
    // 口令不为空, 使用从口令派生出的密钥解密文件
    CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
    CryptHashData(hHash, szPassword, strlen(szPassword), 0);
    CryptDeriveKey(hProv, ENCRYPT_ALGORITHM,hHash, 0, &hKey);
    CryptDestroyHash(hHash);
    hHash = 0;
    } dwBlockLen=1000-1000%ENCRYPT_BLOCK_SIZE;

    if(ENCRYPT_BLOCK_SIZE > 1) {
    dwBufferLen = dwBlockLen + ENCRYPT_BLOCK_SIZE;
    } else {
    dwBufferLen = dwBlockLen;
    } pbBuffer = malloc(dwBufferLen);
    //解密源文件并写入目标文件
    do {
    dwCount = fread(pbBuffer, 1, dwBlockLen,hSource);
    eof = feof(hSource);
    // 解密数据
    CryptDecrypt(hKey, 0, eof, 0, pbBuffer, &dwCount);
    // 将解密过的数据写入目标文件
    fwrite(pbBuffer, 1, dwCount, hDestination);
    } while(!feof(hSource)); printf("OK\n");
    //关闭文件、释放内存}
    free(pbBuffer);
    fclose(hSource);
    fclose(hDestination);
    }
      

  5.   

    activeskin 控件谁用过,是免费的吗?
    注册时不需要付费吧?
      

  6.   

    其实最简单的就是你对密码进行某些运算,再保存下来不就行了吗?比如说把每个字母取ASCII码等等,如果要求不是太高,也没必要那么麻烦了!
      

  7.   

    最简单的办法就是不要保存用户口令,只在文件中保存口令的Hash,当你验证口令的时候,把用户输入的口令做Hash,将得出的结果与文件中的结果相比较,如果一致说明口令正确.
    当然你需要选择一个安全的Hash算法,比如MD5或者SHA1
      

  8.   

    re westlingsnow(西泠雪)
    可是对汉字可以吗?
      

  9.   

    当然没什么问题,MD5或SHA1可以对二进制数据进行Hash
      

  10.   

    你下载的md5(global.h,md5.h,md5c.c,mddrive.c)里,不要把mddrive.c加到工程里,这里有主文件(有main()),但是你应该看mddrive.c里是如何调用md5的函数的。
      

  11.   

    将字符串的每一个字节异或一个数就可以了
    如下是我的一个简单加解密代码:
    异或数取1-30比较保险
    加密解密都用一个函数
    //////////////////////////////////////////////
    CString CLscCode::CodePassword(CString strOri)
    {
    int iLen=strOri.GetLength();
    if(iLen<1) return "";
    LPTSTR pszOri=strOri.GetBuffer(iLen);
    for(int i=0;i<iLen;i++)
    {
    pszOri[i]=pszOri[i]^8;
    }
    strOri.ReleaseBuffer();
    return strOri;
    }