您的位置:首页 > 编程语言

使用Microsoft CryptoAPI进行加密、解密、签名及验证(代码)

2007-06-06 14:30 816 查看
 
[align=left]#include <stdio.h>[/align]
[align=left]#include <windows.h>[/align]
[align=left]#include <wincrypt.h>[/align]
[align=left]#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)[/align]
[align=left]#define KEYLENGTH 0x00800000[/align]
[align=left]void HandleError(char *s);[/align]
[align=left] [/align]
[align=left]//--------------------------------------------------------------------[/align]
[align=left]// These additional #define statements are required.[/align]
[align=left]#define ENCRYPT_ALGORITHM CALG_RC4 [/align]
[align=left]#define ENCRYPT_BLOCK_SIZE 8 [/align]
[align=left]#define MAX_FILE_SIZE 4000000[/align]
[align=left]#define SIGNATURE_SIZE 500[/align]
[align=left] [/align]
[align=left]BYTE *pbKeyBlob; //用来保存导出的公钥[/align]
[align=left]DWORD dwBlobLen;[/align]
[align=left] [/align]
[align=left]//   Declare the functions. The function definition[/align]
[align=left]//   follows main.[/align]
[align=left]BOOL VerifyFile ([/align]
[align=left]                    PCHAR szSource,                          [/align]
[align=left]                    PCHAR szDestination);[/align]
[align=left]BOOL SignFile   ([/align]
[align=left]                    PCHAR szSource,                          [/align]
[align=left]                    PCHAR szDestination);[/align]
[align=left]BOOL DecryptFile([/align]
[align=left]                    PCHAR szSource, [/align]
[align=left]                    PCHAR szDestination, [/align]
[align=left]                    PCHAR szPassword); [/align]
[align=left] [/align]
[align=left]BOOL EncryptFile([/align]
[align=left]                    PCHAR szSource, [/align]
[align=left]                    PCHAR szDestination, [/align]
[align=left]                    PCHAR szPassword); [/align]
[align=left] [/align]
[align=left]//--------------------------------------------------------------------[/align]
[align=left]//   Begin main.[/align]
[align=left] [/align]
[align=left]void main(void)[/align]
[align=left]{ [/align]
[align=left]     CHAR szSource[100]; [/align]
[align=left]     CHAR szDestination[100]; [/align]
[align=left]     CHAR szPassword[100]; [/align]
[align=left] [/align]
[align=left]     [/align]
[align=left]     //--------------------------------------------------------------------[/align]
[align=left]     // Call EncryptFile to do the actual encryption.   加密文件[/align]
[align=left]     printf("/n------------------------------------------------------------/n");[/align]
[align=left]     printf("/n/n1.Encrypt a file. /n/n");[/align]
[align=left]     printf("/nEnter the name of the file to be encrypted: ");[/align]
[align=left]     scanf("%s",szSource);[/align]
[align=left]     printf("/nEnter the name of the output file: ");[/align]
[align=left]     scanf("%s",szDestination);[/align]
[align=left]     printf("/nEnter the password:");[/align]
[align=left]     scanf("%s",szPassword);[/align]
[align=left] [/align]
[align=left]     if(EncryptFile(szSource, szDestination, szPassword))[/align]
[align=left]     {[/align]
[align=left]     printf("/nEncryption of the file %s was a success. /n", szSource);[/align]
[align=left]     printf("/nThe encrypted data is in file %s./n",szDestination);[/align]
[align=left]     }[/align]
[align=left]     else[/align]
[align=left]     {[/align]
[align=left]     HandleError("/nError encrypting file!"); [/align]
[align=left]     } [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]     //--------------------------------------------------------------------[/align]
[align=left]     // Call Decryptfile to do the actual decryption.   解密文件[/align]
[align=left]     printf("/n------------------------------------------------------------/n");[/align]
[align=left]     printf("/n/n2.Decrypt a file. /n/n");[/align]
[align=left]     printf("/nEnter the name of the file to be decrypted: ");[/align]
[align=left]     scanf("%s",szSource);[/align]
[align=left]     printf("/nEnter the name of the output file: ");[/align]
[align=left]     scanf("%s",szDestination);[/align]
[align=left]     printf("/nEnter the password:");[/align]
[align=left]     scanf("%s",szPassword);[/align]
[align=left] [/align]
[align=left]     if(DecryptFile(szSource, szDestination, szPassword))[/align]
[align=left]     {[/align]
[align=left]     printf("/nDecryption of the file %s was a success. /n", szSource);[/align]
[align=left]     printf("/nThe decrypted data is in file %s./n",szDestination);[/align]
[align=left]     }[/align]
[align=left]     else[/align]
[align=left]     {[/align]
[align=left]     HandleError("/nError decrypting file!"); [/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]     //--------------------------------------------------------------------[/align]
[align=left]     // Call SignFile to do the actual signature             签名文件[/align]
[align=left]     printf("/n------------------------------------------------------------/n");[/align]
[align=left]     printf("/n/n3.Sign a file. /n/n");[/align]
[align=left]     printf("/nEnter the name of the file to be signed: ");[/align]
[align=left]     scanf("%s",szSource);[/align]
[align=left]     printf("/nEnter the name of the signature file: ");[/align]
[align=left]     scanf("%s",szDestination);[/align]
[align=left] [/align]
[align=left]     if(SignFile(szSource, szDestination))[/align]
[align=left]     {[/align]
[align=left]         printf("/nSignature of the file %s was a success. /n", szSource);[/align]
[align=left]         printf("/nThe signature data is in file %s./n",szDestination);[/align]
[align=left]     }[/align]
[align=left]     else[/align]
[align=left]     {[/align]
[align=left]         HandleError("/nError while signing the file!"); [/align]
[align=left]     }[/align]
[align=left] [/align]
[align=left]     //---------------------------------------------------------------------[/align]
[align=left]     // Call VerifyFile to do the actual verification   验证签名[/align]
[align=left]     printf("/n------------------------------------------------------------/n");[/align]
[align=left]     printf("/n/n4.Verify a file and its signature. /n/n");[/align]
[align=left]     printf("/nEnter the name of the file to be verified: ");[/align]
[align=left]     scanf("%s",szSource);[/align]
[align=left]     printf("/nEnter the name of the signature file: ");[/align]
[align=left]     scanf("%s",szDestination);[/align]
[align=left]     //printf("/nEnter the name of the public key file: ");[/align]
[align=left]     //scanf("%s",szDestination);[/align]
[align=left] [/align]
[align=left]     if(VerifyFile(szSource, szDestination))[/align]
[align=left]     {[/align]
[align=left]         printf("/nVerification of the file %s was a success. /n", szSource);[/align]
[align=left]     }[/align]
[align=left]     else[/align]
[align=left]     {[/align]
[align=left]         HandleError("/nVerification failed. Error file!"); [/align]
[align=left]     }[/align]
[align=left] [/align]
[align=left]} // End of main[/align]
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息