2012-03-07 2 views
0

간단한 행렬 곱셈 기반 암호화를위한 대학 프로젝트 작업.행렬 곱셈에 의한 암호화

프로젝트 개요는 다음과 같습니다.

텍스트 파일에 행렬을 곱한 암호화 키 매트릭스 = 암호화 된 파일.

키 매트릭스의 역행을 곱한 행렬에 암호화 된 파일 = 암호가 해독 된 파일.

는하지만 조금 더 가서 에게 (, GIF 등 등을 텍스트, MP3) 모든 파일을 할 수 있어야합니다.

저는이 문제를 해결하기 위해 수 시간 동안 연구 해 왔으며 조금 좌절하기 시작했습니다.

내가 생각할 수있는 가장 좋은 방법은 원시 바이너리를 읽고 암호화를 수행하는 것입니다.

그래서 -> 질문 :

  1. 나는 파일에 행렬 곱셈과 (본질적으로) 다시 쓰기 바이너리를 수행 행렬에 넣어 파일에서 원시 이진을 추출 할 수 있습니까?

  2. 또한 다른 컴퓨터에서 이러한 방법의 실행 가능성은 무엇입니까? 및 플랫폼? (내가 다시 변환 int 형 및 암호 해독에 이진 변환 아마도 경우이를 생각하고, 서로 다른 컴퓨터에 다른 크기 할당을 change-- 수 등?)

을 또한, 나는이 의견에 오신 것을 환영 해요 더 나은 솔루션에

---> 그러나 기본 알고리즘은 행렬 곱셈을 기반으로해야합니다.

내 코드 :

int writetomatrix(int current_variable) 
{ 
    if (counter == 9){ 
     counter=0; 
     b=0; 
     a=0;} 

    if (b==3) b=0; 
    if (a==3) {b++; 
       a=0;} 
    counter++; 
    B[a][b]=current_variable; 
    a++; 

} 
    int main() { 
     int *buffer= new int[1]; 
     ifstream input; 
     input.open ("input.txt",ios::in|ios::binary); 
     input.read ((char*)&buffer, 1); 
     writetomatrix(buffer); 
    } 

오류 내가 얻을 :

initializing argument 1 of ‘int writetomatrix(int)’ 
+0

유닉스의'crypt' (구식) 버전은 Hill 암호를 사용했습니다. 이것은 당신이 묘사 한 것입니다. 나는 보지 않았지만 적어도 하나의 그러한 구현에 대한 소스를 상당히 쉽게 찾을 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다.하지만 제가 말한 것처럼 이진 계산을 할 수 있는지 알고 싶습니까? – midnightBlue

+0

짧은 대답은 "예"입니다. 바이너리 데이터를 읽고 조작 할 수 있습니다. 일반적으로'unsigned char'의 배열 (또는 벡터 등)로 사용합니다. –

답변

0

당신은 문자 또는 INT의 배열에 fread를 사용하여 이진 파일을 읽을 수 있습니다. 바이트 순서가 동일하게 유지되는 한 모든 파일을 읽고 다시 쓸 수 있습니다. 읽은 바이트 나 단어로 원하는 것을 할 수 있습니다. sizeof을 사용하면 int의 크기를 알 수 있습니다. 오늘날 대부분의 플랫폼에서는 4 바이트입니다.

+0

답장을 보내 주셔서 감사합니다. :) 당신이 바이트 순서의 의미를 완전히 이해하지 못했지만 요? – midnightBlue

+0

http://en.wikipedia.org/wiki/Endianness를 참조하십시오. –

관련 문제