티스토리 뷰

c언어

DES 구현 1일차

삼전동해커 2020. 11. 5. 14:30

C언어 코딩 공부 겸 DES를 C언어로 구현중이다.

DES에 대한 정보는 https://watchout31337.tistory.com/219

사실 1일차는 아니지만 블로그를 오늘했으니 오늘부터 1일차임.

뼈대를 갖춰놓고 나중에 효율적으로 수정해야겠다.

시큐어 코딩에  관해서 https://iamfreeman.tistory.com/entry/%ED%95%9C%EA%B5%AD%EC%9D%B8%ED%84%B0%EB%84%B7%EC%A7%84%ED%9D%A5%EC%9B%90KISA-%EA%B8%B0%EC%88%A0%EC%95%88%EB%82%B4%EC%84%9C-%EA%B0%80%EC%9D%B4%EB%93%9C


여기서 공부했다.


#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//평문을 2진수로 변환하는 Binary 함수
void Binary(char *mes){ //char *mes = p
char bit[512]; //bit배열에 비트값을 받음
for(int i=0;i<64;i++){
for(int j=0;j<512;j++){
if(j%8==0){
bit[j]=mes[i]/128;
}
if(j%8==1){
bit[j]=mes[i]/64;
}
if(j%8==2){
bit[j]=mes[i]/32;
}
if(j%8==3){
bit[j]=mes[i]/16;
}
if(j%8==4){
bit[j]=mes[i]/8;
}
if(j%8==5){
bit[j]=mes[i]/4;
}
if(j%8==6){
bit[j]=mes[i]/2;
}
if(j%8==7){
mes[i]=mes[i]%2; //마지막 값은 걍 2로 나눈값과 같다.
bit[j]=mes[i];
}
//printf("%d ",bit[j]);
}
}
}

//단순 P박스 구현. rand_mes배열에 1~64 값 랜덤 할당 후 배열 리턴
//배열을 리턴해야하므로 char* 리턴형, 포인터인 이유는 배열의 주소값을 리턴하기 위해
char* SimplePBox(){
srand((unsigned int)time(0)); //랜덤 함수의 시드값 설정
static char rand_mes[64]; //정적 변수 선언으로 지역변수의 값을 초기화하지 않고 값을 그대로 사용
for(int j = 0 ; j < 64 ; j++){
rand_mes[j]=rand()%64; //랜덤 값 할당
//printf("배열 출력 \n%d ",rand_mes[j]);
}
printf("\n");
return rand_mes; //배열 리턴
}

//char *mes라는 포인터 선언
//라운드 함수 구현. 16라운드 돌려야함.
void RoundFunc(char *mes){
int LBit[32];
int RBit[32];

//generate l32
printf("LBIT 출력\n");
for(int i=0;i<32;i++){
LBit[i]=mes[i];
printf("%d ",LBit[i]);
}
printf("\n");

//generate r32
printf("RBIT 출력\n");
for(int i=32;i<64;i++){
RBit[i-32]=mes[i];
printf("%d ",RBit[i-32]);
}

}
//DES 함수 키랑 xor연산 해야함.
void DES_func(int RBit[32]){
char EX_RBit[48];
EX_RBit[0]=RBit[31];
for(int j=1;j<8;j+=6){
for(int i=0;i<4;i++){
EX_RBit[j+i]=RBit[0];
}
}
}

//lbit와 rbit자리 바꿔주는 함수
void Swapper(int LBit[32],int RBit[32]){
//int EN_LBit[32]=RBit[32];
//int EN_RBit[32]=
}

int main(){
char *p = SimplePBox(); //배열을 리턴하는 SimplePBox를 받아주는 포인터 p 선언
Binary(p); //배열의 주소를 가지고 있는 p를 사용
//for(int i=0;i<16;i++){
RoundFunc(p);
//DES_func();
//Swapper();
//}

}


코드에 대한 설명도 있다.


여기서 라운드 함수까지 구성하고 함수를 여러개로 묶는 방법으로 라운드 함수를 구현해야겠다. 

그리고 2진수로 바꾸는 binary함수도 다시 짜봐야겠다.

'c언어' 카테고리의 다른 글

정적 변수 사용하기  (0) 2020.11.10
배열 리턴하기  (0) 2020.11.10
DES 구현 2일차  (0) 2020.11.10
main함수 argc,argv인자에 대하여  (0) 2020.08.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함