0
저는 암호화/해독 루틴에 관한 초보자입니다. DCPCrypt를 사용하여 암호화 된 문자열의 암호를 해독하기 위해 Lockbox3을 내 응용 프로그램으로 이동하려고합니다.DCPCrypt to Lockbox3 이전
이function TfrmMain.Encrypt(value: string): string;
var
CipherR : TDCP_rijndael;
m, sm, Key, IV: string;
Data: string;
begin
Key := PadWithZeros(m, KeySize);
IV := PadWithZeros(sm, BlockSize);
Data := PadWithZeros(value, BlockSize);
m := 'SOMEWORDSOMEWORD';
sm := 'WORDSOMEWORDSOME';
Key := PadWithZeros(m, KeySize);
IV := PadWithZeros(sm, BlockSize);
CipherR := TDCP_rijndael.Create(Self);
if Length(m) <= 16 then
CipherR.Init(Key[1], 128, @IV[1])
else if Length(m) <= 24 then
CipherR.Init(Key[1], 192, @IV[1])
else
CipherR.Init(Key[1], 256, @IV[1]);
CipherR.EncryptCBC(Data[1], Data[1], Length(Data));
CipherR.Free;
FillChar(Key[1], Length(Key), 0);
code := Base64EncodeStr(Data);
Result := code;
end;
가
내가 Lockbox3를 사용하여이 방법을 암호화 된 문자열을 해독하는 지금 싶습니다,하지만 난 m와 SM 등의 암호화 기능에 사용 된 값을 사용해야하며, 내가 알고 내가 어떻게 할 수 있습니다 의 내가 암호화이 기능을 있다고 가정 해 봅시다 내가 할 수 있다면 그렇게해라. sm 값을 사용하여 Codec1.Password를 설정한다고 생각했지만 작동하지 않습니다.
아이디어가 있으십니까? 모든 조언을 주셔서 감사합니다. 대한
나는 명확하지 않은 것을 두려워합니다. 내 문제는 'SOMEWORDSOMEWORD'문자열을 암호화하지 않습니다. DCPCrypt를 사용하여 위의 함수를 사용하여 문자열을 암호화했습니다. DCPCrypt를 사용하면 Key와 IV라는 두 가지 값을 설정해야합니다 (스 니펫 참조). 암호를 해독하려면 Key와 IV에 동일한 값을 사용해야하며 암호 해독은 올바르게 작동합니다. 이제 Lockbox3으로 마이그레이션 할 때까지 기다렸다가 Lockbox를 사용하여 DCPCrypt로 암호화 된 동일한 문자열을 해독해야하지만 Lockbox에서 암호를 설정할 수 있습니다 (Key 또는 IV의 동일한 값이므로 생각합니다). 그러나 어떻게 사용하는지 모르겠습니다. 다른 값. – Marco
자신의 IV와 열쇠에서 시작하는 경우, 당신이 요구하는 것은 할 수 없습니다. 확실히 다른 방법으로 갈 수는 있지만 DCPcrypt는 LB3으로 암호화 된 문자열의 암호를 해독합니다. LB3은 암호를 해시 (SHA1)하여 2 진 키를 제조합니다. 암호화 할 때 LB3은 임의의 64 비트 번호 (넌스)를 생성합니다. 이 난스는 0으로 확장되어 IV로 사용됩니다. nonce는 출력 스트림 앞에 추가됩니다. LB3가 해독되면, 넌스가 픽업되어 IV를 형성하기 위해 추가됩니다. IV에 관한 한, IV를 붙이면 LB3에서 암호를 해독 할 수 있습니다.하지만 이것은 높은 암호가있는 경우에만 작동합니다 ... –
... DCPcrypt IV의 64 비트가 0입니다. 또한 바이너리 키를 암호 문자열로 변환하는 문제가 남아 있습니다. DCPcrypt 암호화 방법을 제어 할 수있게 허용하면 문제가 해결 될 수 있지만 문제는 현재 해결되어 있으므로 해결할 수 없습니다. –