나는 C에서 텍스트 파일을 암호화 할 수있는 프로그램의 구현을 작성했으며 그 반대의 경우도 마찬가지입니다.Blowfish 알고리즘이 "표준"인가요?
BLOWFISH 알고리즘이 기본 제공됩니다. 하지만 내 생각은 다음과 같습니다. 긴 파일에 4 개의 문자 집합을 만드는 경우 0x12345678이라고 가정 해 봅니다. 파일을 읽는 올바른 순서를 알고 있기 때문에 디코딩 할 수 있습니다.
한편, memcpy()
과 같이 사전에 만들어진 함수를 사용하면 읽는 내용은 이전 함수처럼 0x87654321처럼 정렬됩니다. 그러나 사용 된 알고리즘은 동일합니다.
파일에서 데이터를 읽고 획득하는 "표준"방법이 있습니까? 아니면 이전 예제 모두 괜찮습니까? 온라인 사이트 (blowfish online)에서 memcpy()
과 함께 사용 된 버전은 ECB 모드를 사용할 때 해당 버전과 호환되지 않습니다. 0x1234567과 같은 데이터를 얻는 버전은 사이트에서 잘 작동합니다. (작업이란 내 프로그램으로 암호화 된 파일을 만들고 온라인으로 해독하는 것을 의미합니다.)
예를 들어 프로그램에서 코드를 작성하고 코드를 해독하는 경우 은 내 프로그램을 알지 못하는 다른 사람 (최소한 코드)이 코드화/해독해야합니다.
EDIT : memcpy()
함수는 배열의 가장 낮은 인덱스를 INT 번호의 오른쪽 끝으로 변환합니다.
이
는 64 비트 블록에 대한 데이터를 처리하는 코드이다memcpy(&cl, &file_cache[i], sizeof(unsigned long));
memcpy(&cr, &file_cache[i + 4], sizeof(unsigned long));
그리고 이것은 (정확하게 블록마다 8 번 반복, 즉 버퍼로부터 판독을 정리하여, 잘 작동)의 핵심 부분 memcpy가 아닌 비트 마법을 사용하여 동일한 부() 및 엔디안 문제 준수 :
if (i==0){
cl <<= 24;
L |= 0xff000000 & cl;
}
else if (i==1){
cl <<= 16;
L |= 0x00ff0000 & cl;
}
else if (i==2){
cl <<= 8;
L |= 0x0000ff00 & cl;
}
else if (i==3){
//cl <<= 24;
L |= 0x000000ff & cl;
}
else if (i==4){
cl <<= 24;
R |= 0xff000000 & cl;
}
else if (i==5){
cl <<= 16;
R |= 0x00ff0000 & cl;
}
else if (i==6){
cl <<= 8;
R |= 0x0000ff00 & cl;
}
else if (i==7){
//cl <<= 8;
R |= 0x000000ff & cl;
}
이어서 L과 R이 암호화되도록 전송된다. 이 마지막 구현은 다른 복어 버전을 온라인으로 사용하는 경우 작동하므로 원칙적으로 개선되어야합니다.
어떤 구현이 더 빠르거나 더 좋고/더 가벼운/강합니까? memcpy()
이 권장되는 경우 cl 및 cr의 내용을 반대로/미러링하는 편리하고 빠른 방법이 있습니까? 당신은 4 바이트 일련의 단어로 파일을 읽을 경우 일관된 순서로 처리되는 개별 바이트를 확인하기 위해 필요에 따라
귀하의 질문에 답변하려면 귀하의 구현이 그 결과와 일치하는지 확인하기 위해 [이 복어 테스트 벡터] (https://www.schneier.com/code/vectors.txt)를 검토하십시오. –
암호화는 바이트 스트림을 통해 정의됩니다. 여러 바이트를 정수로 읽는 경우 리틀 엔디안 값과 빅 엔디안 값의 차이가있는 것으로 보입니다. 바이트 스트림에서 코드가 올바르게 작동하는지 확인해야합니다. Blowfish 알고리즘을 올바르게 구현하는 경우 Blowfish 알고리즘을 올바르게 구현 한 다른 사람들도 키를 알고 있고 해독 할 수 있어야하는 데이터를 보낼 수 있어야하며 암호화 된 데이터를 보낼 수 있어야합니다. 그들은 키를 알고 있고 암호를 해독 할 수 있어야합니다. 이것이 알고리즘이 표준화 된 이유입니다. –