2013-02-11 4 views
1

이상한 문제가 발생하여 cfb 모드와 함께 aes 암호화를 사용하고 있습니다. 좋습니다. 고정 IV로 암호화를 테스트했습니다. 하지만 무작위로 IV를 사용하면 문제가 나타납니다. 나는 세부적으로 갈거야. 난이 확인 암호화 단계에서이 기능을 사용하는 경우암호화 초기화 벡터 실패

function Random16DigitsString: AnsiString; 
var 
    i: Integer; c0: byte; 
begin 
    Randomize; 
    c0:=ord('0'); 
    SetLength(Result, 16); 
    Result[1] := char(c0+Random(9)+1); 
    for i:=2 to 16 do Result[i] := char(c0+Random(10)); 
end; 

상기 코드의 샘플 출력 8,229,343,736,510,872

이다하지만 동일한 키를 사용하여 파일을 해독 할 때 그 출력 쓰레기. 그러나 암호화 단계에서이 키를 하드 코딩하면 암호 해독이 성공적으로 진행됩니다.

내가 누락되었습니다. 난 간단한 난수 생성기와 함께 갈거야.

+1

1) 배열의 [0..15] 바이트가 아닌'AnsiString'을 사용하는 이유는 무엇입니까? 2) 랜덤 (Random)은 모든 암호 사용에있어 부적절합니다. 3) ASCII 숫자뿐만 아니라 모든 가능한 바이트를 생성해야합니다. 4) 암호화에 사용한 암호 해독에 동일한 IV를 사용해야합니다. 암호문에 IV를 붙이는 것은 표준 방법입니다. – CodesInChaos

+0

AnsiString을 사용하여 IV를 저장하고 있는데, 동일한 키가 무작위로 생성되지 않을 때 왜 동일한 키가 작동하지 않았는지 이해할 수 없지만 동일한 키가 작동하는 문자열에 동일한 키가 하드 코딩 된 경우 이해할 수 없습니다. – Rahul

+0

나는 IV의 값이 암호화 및 암호 해독 단계 (무작위로 생성 된 코드 사용)와 (하드 코딩 된 IV 값)에서 동일하다는 것을 확인했다. 그렇다면 왜이 문제는, 난 정말 혼란 스러워요 – Rahul

답변

0

AnsiString을 사용하여 컨텍스트의 키를 저장하고있었습니다. 이것은 파스칼에서 AnsiString이 단일 바이트가 아니기 때문에 실제 문제였습니다. AnsiString에 초점을 맞춘 @CodeInChaos처럼, 나는 그것을 검사하고 발견했다. 그래서

Key: AnsiString 

Key : Array [0..32] of Char; 

을 교체했고 그것은 성공적으로 일했다.

@CodeInChaos.