Cipher Block Chaining (CBC) 모드를 사용하여 AES를 코딩하려고합니다. 나는 구조가 정확하다는 것을 확신한다. (해독 할 때 AES와 역으로 보내기 전에 새로운 암호문을 xoring한다. 암호화 된 파일을 원래의 평문에 복호화하는 것이 문제 다. 그것은 xored 방법과 관련이있을 수 있습니다. 나는 내 AES 알고리즘이 정확하다는 것을 알고 있습니다. 두 문자 배열을 함께 xor. 두 가지를 함께 xor 한 결과를 취한 다음 xor 또는 xor 중 하나를 반환하면 내가 그 기능을 확인할 때 대답으로, 다시 다른 피연산자를 받아야합니다. 그러나, 내가 일반 텍스트로 읽을 경우. 그런C에서 xoring에 문제가 있습니다
작동하고 이전 암호문
//THERE IS A RANDOM INITIALIZATION VECTOR BEFORE GETTING INTO THE WHILE LOOP
while ((bytes_in = (read(fin, plaintext, AES_BLOCK))))
{
for (count = 0; count < AES_BLOCK; count++){
xor[count] = (plaintext[count])^(ciphertext[count]);
}
//AES STUFF NOT SHOWN SO THERE ISN'T MUCH CODE
status = write (fdsk, ciphertext, strlen (ciphertext));
for (count =0; count < AES_BLOCK; count++)
plaintext[count] = '0';
}
함께에 xor하지 않습니다
복호화 부분 :
bytes = read(fin, previous_CT, AES_BLOCK); //reads in the initialization vector
while(total_bytes < aes_length)
{
bytes = read(fin, ciphertext, AES_BLOCK);
for(count = 0; count < AES_BLOCK; count++){
plaintext[count] = (xor[count])^(previous_CT[count]);
printf("plaintext %d", plaintext[count]);
}
}
내 문제/질문을 요약하면 : 내가 할 필요가 인식하지 오전 문자를 XOR 연산 뭔가가있는 경우 가 궁금하네요. 내가 올바른 방법으로하고있는 것 같지만 어떤 이유로 정확한 결과를 얻지 못하고있다. 나는 그것이 내 프로그램을 어지럽히는 정보를 읽는 방법 일 수 있는지 궁금합니다. 제발 도와주세요! 감사합니다.
하나의 디버깅 기술은 코드에서 모든 AES 내용을 제거하고이를 시도하는 것입니다. 코드는 이전 블록 (또는 IV)과 함께 각 블록을 xoring하게됩니다. 이것은 디버거에서 따라하기 쉽고 아마도 문제가 더 쉽게 발견 될 것입니다. 그것이 작동 할 때 AES 코드를 다시 놓을 수 있습니다. –
해독하는 동안 왜 'fin'에서 두 번 연속으로 읽는 지 궁금합니다. – Elalfer
어떤 종류의 시스템입니까? 파일이 바이너리 모드로 열렸습니까? (유닉스 시스템에서는 중요하지 않습니다)? 'xor','plaintext', ciphertext'와'previous_CT'의 타입은 무엇입니까? –