使用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]
相关文章推荐
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证 (转发)
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证
- 使用Microsoft CryptoAPI进行加密、解密、签名及验证
- 可再发行平台 SDK:CAPICOM ,对数据进行数字签名、对代码签名、验证数字签名、包封保密数据、对数据进行散列处理、加密及解密数据的SDK
- iOS使用Security.framework进行RSA 加密解密签名和验证签名
- 使用windows crypto API加密解密
- Cryptopp iOS 使用 RSA加密解密和签名验证签名
- 使用windows crypto API加密解密
- 使用crypoto++进行加密解密签名和认证心得
- 使用证书对数据进行签名、验签、加密、解密以及openssl的常用方法
- 使用Python进行AES加密和解密的示例代码
- 使用windows crypto API加密解密
- Golang代码搜集-基于RSA的公钥加密私钥解密-私钥签名公钥验证
- .NET Core 使用RSA算法 加密/解密/签名/验证签名
- 使用 GPG 对数据进行加密解密签名
- RSA加密解密及RSA签名和验证
- 基于Crypto++/Cryptopp的rsa密钥生成,rsa加密、解密,rsa签名、验签
- 使用Dotfuscator 进行.Net代码混淆 代码加密的方法
- Java使用RSA加密解密签名及校验