2016-12-20 5 views
0

Delphi에서 TADOQuery 구성 요소를 사용하여 RijndaelManaged 알고리즘을 사용하여 타사 .net 응용 프로그램에서 암호화 된 데이터베이스의 열 내용을 읽습니다. 나는 원래의 XML 형식으로 데이터를 "성공적으로"해독했지만 해독 된 데이터의 시작 부분에 임의의 문자가 있습니다.해독 된 데이터의 시작 부분에 임의의 문자가 있음

?_????g???M.0"?> 
<template xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="846aaa43-dc42-4bc7-98bd-bf643fd324cb" xmlns="http://web.net/schema"> 
    etc, etc, etc... 

나는 이것이 BOM이지만 데이터 읽기/해독 중에 그것을 무시하는 방법을 설명 할 수 없다고 생각합니다.

얻어진 byte array
tmpMemoryStream : TMemoryStream; 
Result : TByteArray; (array of byte) 

tmpMemoryStream := TMemoryStream.Create; 
tmpMemoryStream.LoadFromStream(ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName('Design'), bmRead)); 

setLength(Result, tmpMemoryStream.Size); 
tmpMemoryStream.Read(Result, 0, tmpMemoryStream.size); 

다음 데이터를 복호화 함수에 전달된다

은이 같은 데이터를 읽는다.

미리 감사드립니다.

A9 CD AA F5 AE 36 04 2F 04 2A A5 2F CE EF B0 83 C4 97 F7 CA 26 F7 28 ED F8 C3 26 F4 57 D5 CB EA 36 10 F9 9B A6 CE F2 67 6B 47 B9 16 6E A7 41 14 A2 CD 99 88 51 17 67 03 C0 C4 66 18 D6 2A 1F D2 DD 5F 24 83 14 87 96 35 90 B6 70 F1 E6 51 BD 7A AB 41 86 E8 4D F4 E0 B7 D4 0A 22 DA 26 BD 54 D4 DE D1 23 36 BE D8 C8 D9 EC D8 5B 0E 0B 1D BE D8 A3 BD B7 E4 37 40 EB 86 76 85 E5 F7 15 87 EB 47 

각 파일을 해독 데이터 변경의 잘못된 첫 부분 만, 예로서, 같습니다

EDIT 1

각 암호화 파일은 다음과 같다 같은 헤더를 갖는다 이 같은 :

3F 3F 3F 3F 3F 36 04 2F 04 2A 3F 2F 3F 3F 3F 3F 3F 3F 3F 3F 26 3F 28 3F 3F 3F 26 3F 57 3F 3F 3F 36 10 3F 3F 3F 3F 3F 67 6B 47 3F 16 6E 3F 41 14 3F 3F 3F 3F 51 17 67 03 3F 3F 66 18 3F 2A 1F 3F 3F 5F 24 3F 14 3F 3F 35 3F 3F 70 3F 3F 51 3F 7A 3F 41 3F 3F 4D 3F 3F 3F 3F 0A 22 3F 26 3F 54 3F 3F 3F 23 36 3F 3F 3F 3F 3F 3F 5B 0E 0B 1D 3F 3F 3F 3F 3F 3F 37 40 3F 3F 76 3F 3F 3F 15 3F 3F 47 

편집 2그것은이 with 블록되었으므로 IV 변수가 설정되지 않은 경우에도,

with myRijndaelManaged do 
    begin 
     BlockSize := 128; 
     KeySize := 256; 
     Key := myKey; 
     IV := IV; <-- Should have been "myIV" 
     Padding := PaddingMode.PKCS7; 
     Mode := CipherMode.CBC; 
    end; 

그것에는로서 지정되지 않았 :3210 그것은 문제는 다음과 같은 코드를 사용 하였다 .. IV로했다 오류는 myRijndaelManaged 개체의 속성이므로 오류입니다. 올바른 바이트 배열 데이터가 포함 된 IVmyIV으로 변경했습니다. 포인터에 대한

감사는 일반 텍스트 복구 문제가 처음 16 바이트에 이르는, 암호 해독 중에 IV 값을 설정하지 않는 것처럼

+1

처음 몇 바이트는 항상 동일합니까? 아마도 암호화 된 콘텐츠가 그 이후에 시작됩니다. –

+0

해당 데이터의 16 진수 값은 무엇입니까? –

+0

문서에 언급되지 않았지만 '읽기'에 전달하는 두 번째 매개 변수를 '오프셋'이라고합니다. 나는 그것이 읽기의 시작 위치를 결정하는 데 사용된다고 추정 할 수 있습니다. 그렇지 않은 경우 '위치'또는 '탐색'을 사용하여 진행하십시오. –

답변

3

이 오히려 많이 보이는 @bartonjs.

전체 복구하려면 암호 텍스트, 키 및 원본 IV (ECB 이외의 모드 용)가 필요합니다.

+0

대단히 감사합니다. – Gavin