2

Lockbox 暗号コンポーネントを抽象化するクラス階層があります。具体的には、PKCS#5 パディングを使用した AES-265 に関心があります。

クラス インスタンスは 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;

何か案は?

4

0 に答える 0