[go: up one dir, main page]

0% found this document useful (0 votes)
27 views7 pages

CS609 Solution by Junaid

The document describes a C program that encrypts and decrypts files using AES encryption. It takes a source file, destination file and password as arguments and uses Windows cryptography APIs to encrypt or decrypt the file contents.

Uploaded by

sajidaruqaya760
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views7 pages

CS609 Solution by Junaid

The document describes a C program that encrypts and decrypts files using AES encryption. It takes a source file, destination file and password as arguments and uses Windows cryptography APIs to encrypt or decrypt the file contents.

Uploaded by

sajidaruqaya760
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 7

ABSTRACT

My Name is JUNAID MALIK, I have


three+ years Experiences in this
field. I work in these language PHP,
LARAVEL, PYTHON
(DJANGUE+FLASK)

JUNAID MALIK
0304-1659294

CS619-519
PROJECT+INTERNSHIP
AL-JUNAID TECH INSTITUTE
CS609 Assignment
#include <stdio.h>

#include <windows.h>

#include <wincrypt.h>

#include <stdbool.h>

#include <string.h>

#define AES_BLOCK_SIZE 16

bool encryptFile(char *sourceFile, char *destFile, char *password);

bool decryptFile(char *sourceFile, char *destFile, char *password);

void handleError(const char *message);

void printUsage();

int main(int argc, char *argv[]) {

if (argc < 3) {

printUsage();

return 1;

char *command = argv[1];

char *sourceFile = argv[2];

char destFile[MAX_PATH];

char password[256];

if (strcmp(command, "encrypt") == 0) {
AL-JUNAID TECH INSTITUTE
printf("Enter encryption password: ");

scanf("%s", password);

printf("Enter destination file path (or press 's' for same path as source): ");

scanf("%s", destFile);

if (strcmp(destFile, "s") == 0) {

strcpy(destFile, sourceFile);

if (encryptFile(sourceFile, destFile, password)) {

printf("File encrypted successfully.\n");

} else {

handleError("Encryption failed.");

} else if (strcmp(command, "decrypt") == 0) {

printf("Enter decryption password: ");

scanf("%s", password);

printf("Enter destination file path (or press 's' for same path as source): ");

scanf("%s", destFile);

if (strcmp(destFile, "s") == 0) {

strcpy(destFile, sourceFile);

if (decryptFile(sourceFile, destFile, password)) {

printf("File decrypted successfully.\n");

} else {

handleError("Decryption failed.");

}
AL-JUNAID TECH INSTITUTE
} else {

printUsage();

return 1;

return 0;

bool encryptFile(char *sourceFile, char *destFile, char *password) {

FILE *source = fopen(sourceFile, "rb");

if (!source) {

handleError("Unable to open source file for reading.");

return false;

FILE *dest = fopen(destFile, "wb");

if (!dest) {

fclose(source);

handleError("Unable to open destination file for writing.");

return false;

HCRYPTPROV hCryptProv;

HCRYPTKEY hKey;

if (!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {

fclose(source);

fclose(dest);

handleError("Cryptographic context acquisition failed.");


AL-JUNAID TECH INSTITUTE
return false;

if (!CryptCreateHash(hCryptProv, CALG_SHA_256, 0, 0, &hKey)) {

fclose(source);

fclose(dest);

CryptReleaseContext(hCryptProv, 0);

handleError("Hash creation failed.");

return false;

// Set password as key

if (!CryptHashData(hKey, (BYTE *)password, strlen(password), 0)) {

fclose(source);

fclose(dest);

CryptDestroyHash(hKey);

CryptReleaseContext(hCryptProv, 0);

handleError("Key setup failed.");

return false;

BYTE buffer[1024];

DWORD bytesRead, bytesWritten;

BOOL success;

while ((bytesRead = fread(buffer, 1, sizeof(buffer), source)) > 0) {

success = CryptEncrypt(hKey, NULL, feof(source), 0, buffer, &bytesRead, sizeof(buffer));

if (!success) {

fclose(source);
AL-JUNAID TECH INSTITUTE
fclose(dest);

CryptDestroyHash(hKey);

CryptReleaseContext(hCryptProv, 0);

handleError("Encryption failed.");

return false;

bytesWritten = fwrite(buffer, 1, bytesRead, dest);

if (bytesWritten != bytesRead) {

fclose(source);

fclose(dest);

CryptDestroyHash(hKey);

CryptReleaseContext(hCryptProv, 0);

handleError("File write error.");

return false;

fclose(source);

fclose(dest);

CryptDestroyHash(hKey);

CryptReleaseContext(hCryptProv, 0);

return true;

bool decryptFile(char *sourceFile, char *destFile, char *password) {

// Similar to encryptFile, with CryptDecrypt instead of CryptEncrypt

// and handling decryption process instead of encryption.

}
AL-JUNAID TECH INSTITUTE
void handleError(const char *message) {

DWORD errorCode = GetLastError();

LPVOID lpMsgBuf;

FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,

NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0,


NULL);

fprintf(stderr, "%s Error %d: %s\n", message, errorCode, (LPCTSTR)lpMsgBuf);

LocalFree(lpMsgBuf);

void printUsage() {

printf("Usage: file-encryptor [encrypt/decrypt] [sourceFile]\n");

You might also like