🔓알고리즘/문자열
파일암호화 Cryptography C++
시작하기 전
사용한 운영체제는 Windows10이며
IDE는 Devcpp를 사용했고, 언어는 C++11입니다!
안녕하세요!
이번에는 파일을 암호화할수있고,
복호화할수있는 프로그램을
만들었습니다
흐헣!!!!
이번꺼도 만들면서 꽤 재밌었습니다
소켓이랑 더불어 거의비등하게 재밌었던것같아요!
그러면 소스코드와함께 원리설명 바로들어갑니다!
[[ 암호화 ]]
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char *ch;
//암호화된 코드를 저장할변수
int encp;
//암호화코드
string filename,filename_t,thx;
//원래파일이름,암호화된파일이름,암호화됬을때파일확장자이름저장변수
cout << "파일경로및 이름을 입력하세요: ";
getline(cin,filename);
//띄어쓰기포함 모두입력
cout << "암호파일의 확장자를 입력하세요: ";
getline(cin,thx);
while(1){ //정수가 아닌값 입력 방지 && char범위
cout << "암호화코드를 입력하세요(1~255): ";
cin >> encp;
if(1<=encp&encp<=255) break;
else cout << "잘못된 코드" << endl;
}
int dot = filename.find('.');
//원래파일이름에서 '.'의 인덱스번호를 찾음
for(int i=0;i<dot;i++) filename_t += filename[i];
//.의인덱스번호전까지 값을 옮긴뒤
filename_t = filename_t + "." + thx;
//.확장자명 을 추가한다
int size;
//파일사이즈
FILE *p;
p = fopen(filename.c_str(),"rb");
//읽기전용으로오픈
if(p==NULL) return 0;
//없는파일일때는 프로그램끝내기
fseek(p,0,SEEK_END); //끝으로가서
size = ftell(p); //파일사이즈재고
fseek(p,0,SEEK_SET); //다시처음으로돌아온다
ch = (char*)malloc(sizeof(char) * size); //파일사이즈만큼 동적할당
fread(ch,sizeof(char),size,p); //파일내용을 읽은뒤 변수 'ch'에 파일내용넣기
fclose(p);
for(int i=0;i<strlen(ch);i++) ch[i]+=encp; //'ch'내용 암호화
p = fopen(filename.c_str(),"wb"); //쓰기형식으로 파일열기
if(p==NULL) return 0; //위와같다
fwrite(ch,sizeof(char),size,p); //암호화된 변수'ch'를 파일내용에 쓰기
fclose(p); //닫고
free(ch); //동적할당풀기
rename(filename.c_str(),filename_t.c_str()); //입력한 암호화된 파일이름으로 이름변경
}
[[ 복호화 ]]
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char *ch;
//암호화된코드를 저장할 변수
int decp;
//복호화코드입력변수
string filename,filename_t,thx;
//원래파일이름,복호화된파일이름,암호화하기전 파일확장자이름저장변수
cout << "파일경로및 이름을 입력하세요: ";
getline(cin,filename);
//같다
cout << "암호화했던 파일의 확장자를 입력하세요: ";
getline(cin,thx);
//암호화전 원래파일 확장자명입력
while(1){ //복호화코드
cout << "암호화코드를 입력하세요(1~255): ";
cin >> decp;
if(1<=decp&&decp<=255) break;
else cout << "잘못된 코드" << endl;
}
int dot = filename.find('.'); //string배열에서 '.'찾기
for(int i=0;i<dot;i++) filename_t += filename[i]; //암호화때코드랑 일치
filename_t = filename_t + "." + thx;
int size; //파일사이즈
FILE *p;
p = fopen(filename.c_str(),"rb"); //읽기전용
if(p==NULL) return 0; //없는함수면 나가기
fseek(p,0,SEEK_END); //끝으로가서
size = ftell(p); //파일사이즈재고
fseek(p,0,SEEK_SET); //다시처음으로오기
ch = (char*)malloc(sizeof(char) * size); //사이즈만큼 동적할당
fread(ch,sizeof(char),size,p); //암호화된코드를 변수'ch'에 저장
fclose(p); //파일닫고
for(int i=0;i<strlen(ch);i++) ch[i]-=decp;
//암호화코드만큼 더해준 했었던만큼 다시 빼주기
p = fopen(filename.c_str(),"wb"); //쓰기전용으로 열기
if(p==NULL) return 0; //파일존재x -> 나가기
fwrite(ch,sizeof(char),size,p); //파일사이즈만큼 파일내용쓰기
fclose(p);
free(ch); //동적할당풀기
rename(filename.c_str(),filename_t.c_str()); //원래이름으로 전환
}
와 설명 다적는데 은근힘드네요
이해가 안가시는분들은 댓글로 질문주세요
감사합니다!
'🔓알고리즘 > 문자열' 카테고리의 다른 글
C++ | 문자열 안에서 특정 문자열 찾기 (0) | 2021.10.17 |
---|---|
split 함수 구현 - C++ (0) | 2020.12.02 |
댓글