LockBox 3 - заполнение PKCS не поддерживается

У меня есть иерархия классов, которая абстрагирует криптографические компоненты Lockbox. В частности, нас интересует AES-265 с отступом PKCS#5.

Экземпляр класса установлен правильно с CBC, а кодировка явно установлена ​​на ANSI, но результирующий вывод зашифрован, что означает, что заполнение отключено. Увы, CBC поддерживает более одной схемы заполнения, и я думаю, что Lockbox не использует ту, которая нам нужна.

У вас есть идеи, где я иду не так?

Это соответствующий код иерархии классов:

TsmEncryptBase = class(TInterfacedObject, IsmEncryption)
private
  FLib: TCryptographicLibrary;
protected
  FCodec: TCodec;
  function Encrypt: Boolean; virtual; abstract;
  function Decrypt: Boolean; virtual; abstract;
public
  constructor Create(const APassword: string;
     const aCipherId: string = 'native.AES-256';
     const aChainModeId:string = 'native.CBC');
  destructor Destroy; override;
end;

constructor TsmEncryptBase.Create(const APassword: string; const aCipherId:
    string; const aChainModeId: string);
begin
  inherited Create;
  FLib   := TCryptographicLibrary.Create(nil);
//  FLib.RegisterBlockChainingModel( TPure_ECB.Create as IBlockChainingModel);

  FCodec := TCodec.Create(nil);
  FCodec.CryptoLibrary  := FLib;
  FCodec.StreamCipherId := uTPLb_Constants.BlockCipher_ProgId;
  FCodec.BlockCipherId := aCipherId;
  FCodec.ChainModeId := uTPLb_Constants.CBC_ProgId;
  FCodec.Password := APassword;
end;

TsmFileEncryptAES = class(TsmEncryptBase)
private
 FPlainTextFileName: string;
 FEncryptedFileName: string;
protected
  function Encrypt: boolean; override;
  function Decrypt: Boolean; override;
public
  constructor Create(const APlainTextFileName, AEncryptedFileName,
     APassword: string);
end;

constructor TsmFileEncryptAES.Create(const APlainTextFileName, AEncryptedFileName,
    APassword: string);
begin
  inherited Create(APassword);
  FPlainTextFileName := APlainTextFileName;
  FEncryptedFileName := AEncryptedFileName;
  FCodec.Encoding := TEncoding.ANSI;
end;

Код используется так:

procedure TForm1.AESFileDecryptClick(Sender: TObject);
var lEncrypt: IsmEncryption;
begin
   lEncrypt := TsmFileEncryptAES.Create(AESFileSaveTo.AsString,
     AESSourceFile.AsString, AESFileKey.AsString);
   lEncrypt.Decrypt;
end;

Есть идеи?

0 ответов

Другие вопросы по тегам