⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encrypt.cpp

📁 RC4加密算法源码
💻 CPP
字号:
// encrypt.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <windows.h>

#define xorswap(a,b) do{a^=b;b^=a;a^=b;}while(0)

struct rc4 {
  unsigned char sbox[256];
  unsigned char kbox[256];
  int i, j;
};

typedef struct rc4 rc4_t;

rc4_t *
rc4open(const void *key, int len)
{
  rc4_t *rc4;

  if (!key)
    return (NULL);

  rc4 = (rc4_t *) malloc(sizeof(*rc4));
  if (!rc4)
    return (NULL);

  for (rc4->i = 256; rc4->i--;) {
    rc4->sbox[rc4->i] = rc4->i;
    rc4->kbox[rc4->i] = ((unsigned char *) key)[rc4->i % len];
  }

  rc4->j = 0;
  for (rc4->i = 0; rc4->i <= 255; rc4->i++) {
    rc4->j = (rc4->j + rc4->sbox[rc4->i] + rc4->kbox[rc4->i]) % 256;
    xorswap(rc4->sbox[rc4->i], rc4->sbox[rc4->j]);
  }

  return (rc4);

}

unsigned char 
rc4getc(rc4_t * rc4)
{
  int t;
  if (!rc4)
    return (-1);
  rc4->i++;
  rc4->i %= 256;
  rc4->j += rc4->sbox[rc4->i];
  rc4->j %= 256;
  xorswap(rc4->sbox[rc4->i], rc4->sbox[rc4->j]);
  t = (rc4->sbox[rc4->i] + rc4->sbox[rc4->j]) % 256;
  return (rc4->sbox[t]);
}

int 
rc4close(rc4_t * rc4)
{
  if (!rc4)
    return (-1);
  free(rc4);
  return (0);
}

int 
rc4crypt(void *key, int keylen, void *buffer, int len)
{
  int i;
  rc4_t *rc4;
  rc4 = rc4open(key, keylen);

  if (!rc4)
    return (-1);

  for (i = 0; i < len; i++)
    ((unsigned char *) buffer)[i] ^= rc4getc(rc4);

  return (rc4close(rc4));
}



int main(int argc, char* argv[])
{
	if(argc != 3) return -1;

	unsigned char buf[4096];

	DWORD nByteRead = 0;
	DWORD nByteWrite = 0;



	if(argv[1][1] == 'e')
	{
		
		HANDLE hFileRead = CreateFile(argv[2], GENERIC_READ, FILE_SHARE_READ,
			NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
		if(hFileRead == INVALID_HANDLE_VALUE){
			DWORD err = GetLastError();
			//char ERR[100];
			//itoa(err, ERR, 10);
			////printf(NULL, ERR, "Error", MB_ICONERROR);
		}
	
		HANDLE hFileWrite = CreateFile("newFile.txt", GENERIC_WRITE, FILE_SHARE_READ, 
			NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
		if(hFileWrite == INVALID_HANDLE_VALUE){
			//MessageBox(NULL, "Could not create the file!", "Error", MB_ICONERROR);
			return -1;
		}

		while(ReadFile(hFileRead, buf, 4096, &nByteRead, NULL))
		{
			if(nByteRead <= 0) break;

			rc4crypt("asdfsadf", 8, buf, nByteRead);


			WriteFile(hFileWrite, buf, nByteRead, &nByteWrite, NULL);
		}


		CloseHandle(hFileRead);
		CloseHandle(hFileWrite);

	}
	else if(argv[1][1] == 'd')
	{
		HANDLE hFileRead = CreateFile(argv[2], GENERIC_READ, FILE_SHARE_READ,
			NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
		if(hFileRead == INVALID_HANDLE_VALUE){
			DWORD err = GetLastError();
		}
	
		HANDLE hFileWrite = CreateFile("newFile.txt", GENERIC_WRITE, FILE_SHARE_READ, 
			NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
		if(hFileWrite == INVALID_HANDLE_VALUE){
			//MessageBox(NULL, "Could not create the file!", "Error", MB_ICONERROR);
			return -1;
		}

		while(ReadFile(hFileRead, buf, 4096, &nByteRead, NULL))
		{
			if(nByteRead <= 0) break;

			rc4crypt("asdfsadf", 8, buf, nByteRead);

			WriteFile(hFileWrite, buf, nByteRead, &nByteWrite, NULL);
		}

		CloseHandle(hFileRead);
		CloseHandle(hFileWrite);
	}
	else return -1;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -