欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

利用按位異或運(yùn)算加密文件(用c語言、c++和vb寫的)-創(chuàng)新互聯(lián)

這是我用來練習(xí)的程序,功能是用密碼加密文件,寫了兩個(gè)版本:第一個(gè)完全用c++寫,練習(xí)類的繼承、操作符重載;第二個(gè)嘗試用c寫dll,vb調(diào)用dll的函數(shù)。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)達(dá)州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
原理

在第一次學(xué)按位異或算符“^”時(shí),我注意到這個(gè)運(yùn)算是可逆的,即(a^b)^b=a,于是就想到可以利用按位異或運(yùn)算將文件加密。后來就寫了加密程序,原理是用特定長度的char類型作為密碼,將文件內(nèi)容與密碼逐字節(jié)異或運(yùn)算,將運(yùn)算結(jié)果寫入另一個(gè)文件,密碼長度不夠就從頭循環(huán)。

c0356b1388ea41cbb4fd9e78203d17a2.png

可以看出,將加密后的文件用相同的密碼再次“加密”后就可以解密。


密碼形式

密碼形式是二進(jìn)制文件“key.bin”。char類型可以放不可打印字符,于是我想到從二進(jìn)制文件中讀取密碼,用16進(jìn)制編輯器編輯二進(jìn)制文件(我用的是flexhexeditor)。二進(jìn)制文件的前4個(gè)字節(jié)是unsigned int型變量,是密碼長度,密碼長度不能太長,我初步定為不超過256字節(jié);從第5個(gè)字節(jié)開始到文件結(jié)尾就是密碼,文件末尾多出一些內(nèi)容也沒關(guān)系。


加密后的文件名

保存的文件文件名,我是直接加一個(gè)擴(kuò)展名“.加密文件”,如果文件本身擴(kuò)展名就是“.加密文件”,就把擴(kuò)展名去掉。


兩個(gè)版本的區(qū)別

c++版是將文件拖動(dòng)到exe程序上打開,程序在工作目錄打開“key.bin”(如果是拖動(dòng)打開或選擇打開方式后雙擊打開,則工作目錄為文件所在目錄)。c和vb版是可以選擇文件,用的是winapi函數(shù)GetOpenFileName。另外c和vb版可以輸入字符串作為密碼,或者從bmp文件產(chǎn)生密碼,是當(dāng)時(shí)考慮各種密碼形式時(shí)的產(chǎn)物。

c++代碼如下,vb和c混合寫的由于有多個(gè)文件,不貼代碼,發(fā)文件:按位異或文件加密,vb

#include#include#include#include//嘗試類繼承的練手作
#define scanlength 65536

class keychar;

class mywords {
	protected:
		unsigned int length;//字節(jié)數(shù)
		char *str;
	public:
		mywords(char * words, int length = 0);
		mywords(int len);
		mywords();
		~mywords();
		int read(std::ifstream &in);//默認(rèn)從文件中讀取length字節(jié)的內(nèi)容 
		int read(std::ifstream &in, int len);//指定讀取的長度
		void write(std::ofstream &out, int len);//將str指向的len字節(jié)內(nèi)容寫入文件
		unsigned int getlength();
		mywords& operator =(mywords& words);
		mywords& operator =(char* words);
		//因?yàn)樽止?jié)數(shù)不一定相等,mywords的按位異或運(yùn)算不滿足交換律
		mywords& operator ^=(keychar& key);
};

class keychar : public mywords {
	public:
		static const int keychar_size = 256;
		void keyread(std::ifstream &in);
		void keywrite(std::ofstream &out);
};

int main(int argc, char *argv[]) {
	int n;
	mywords scan(scanlength); //在一定范圍內(nèi),scanlength越長,速度越快 
	keychar key;
	std::ifstream in, keyin;
	std::ofstream out;
	if (argc >1) {
		//識(shí)別擴(kuò)展名,有".加密文件"則刪,無則追加
		char *file;
		file = strrchr(argv[1], '\\') + 1;//每層文件夾后都有\(zhòng),所以定位到最后一個(gè) 
		char filename[strlen(file) + 64];//預(yù)留一些空間,防止內(nèi)存溢出 
		strcpy(filename, file);
		file = strrchr(filename, '.');//定位到最后一個(gè)'.',就是擴(kuò)展名,“電影.mp4.txt”是純文本文件 
		if (!file || strcmp(file, ".加密文件")) {
			strcpy(filename + strlen(filename), ".加密文件");
		} else {
			*file = '\0';
		}
		//打開文件
		in.open(argv[1], std::ios::binary);
		out.open(filename, std::ios::binary);
		keyin.open("key.bin", std::ios::binary);
		//讀取key文件
		if (keyin) {
			key.keyread(keyin);
			keyin.close();
		}
		//讀取文件并加密保存
		while (!in.eof()) {
			n = scan.read(in);
			scan ^= key;
			scan.write(out,n);
		}
	}
	in.close();
	out.close();
	return 0;
}

mywords::mywords() {
	length = 0;
	str = NULL;
}

mywords::mywords(int len) {
	length = len;
	str = (char*)malloc(length);
}

mywords::mywords(char*words, int length) {
	if (length< 1)length = strlen(words);
	str = (char*)malloc(length);
	for (int i = 0; i< length; i++) {
		str[i] = words[i];
	}
}

mywords::~mywords() {
	if (str)free(str);
}

int mywords::read(std::ifstream &in){
	in.read(str,length);
	return in.gcount();
}

int mywords::read(std::ifstream &in, int len){
	in.read(str,len);
	return in.gcount();
}

void mywords::write(std::ofstream &out, int len){
	out.write(str,len);
}

unsigned int mywords::getlength() {
	return length;
}

mywords& mywords::operator ^=(keychar& key) {
	unsigned int i, j;
	if (key.getlength() >0)
		for (i = j = 0; i< length; i++, j++) {
			if (j >= key.getlength())j -= key.getlength();
			str[i] ^= key.str[j];
		}
	return *this;
}

mywords& mywords::operator =(mywords& words) {
	unsigned int i;
	length = words.length;
	if (str)free(str);
	str = (char *)malloc(length);
	for (i = 0; i< words.length; i++)str[i] = words.str[i];
	return *this;
}

mywords& mywords::operator =(char* words) {
	unsigned int i;
	length = strlen(words);
	if (str)free(str);
	str = (char*)malloc(length);
	for (i = 0; i< length; i++)str[i] = words[i];
	return *this;
}

void keychar::keyread(std::ifstream &in) {
	if (str)free(str);
	length = 0;
	str = NULL;
	in.read((char*)&length, 4);
	if (length >keychar_size)
		length = ((length & 0xff)<< 24) + ((length & 0xff00)<< 8) + ((length & 0xff0000) >>8) + ((length & 0xff000000) >>24);
	if (length >keychar_size) {
		printf("error: key文件格式錯(cuò)誤,不加密(解密)輸出\n");
		system("pause");
	}
	if (length) {
		str = (char*)malloc(length);
		in.read(str, length);
	}
}

void keychar::keywrite(std::ofstream &out) {
	out.write((char*)&length, 4);
	if (length)out.write(str, length);
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁名稱:利用按位異或運(yùn)算加密文件(用c語言、c++和vb寫的)-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://aaarwkj.com/article22/dgoscc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、商城網(wǎng)站、微信小程序、靜態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
精品毛片av一区二区三区| 精品国产一区亚洲二区| 欧美日韩精品国产精品| 亚洲区自拍偷拍一区二区| 欧美日韩一区二区三区色拉拉| 欧美日韩午夜久久免费| 国产精品美女丝袜久久久| 亚洲精品综合在线二区| 久久精品亚洲天然东京热| 成人精品午夜福利视频| 久久精品久久久精品| 成人免费在线观看午夜| 欧美欧美一区二区三区| 免费观看国产性生活片| 国产一区二区三区的网站| 国产黄色三级电影在线| 成人性生交大片免费男同| 久久久久精品久久久| 日韩精品视频一区二区在线观看| 91欧美精品午夜性色福利| 免费午夜福利一区二区| 日韩久久精品国产亚洲av成人| 亚洲成人免费电影久久| 一区二区尤物区亚洲国产精品区| 国产一区二区日本在线| 日本少妇人妻中文字幕| 久久精品国产亚洲av高清综合| 亚洲国产日韩欧美综合久久| 亚洲欧美日韩颜射极品| 午夜福利尤物一区二区| 色婷婷av一区二区三区张| 国产在线精品91系列| 色在线观看综合亚洲欧洲| 日韩视频精品推荐一区二区| 91日本精品一区二区| 国产我不卡在线观看免费| 亚洲精品视频在线观看视频| 亚洲一区二区三区蜜桃av| 欧美日韩一区二区三区色拉拉| 激情五月天色婷婷久久| 欧美精品黑人三级精品|