XE7 的 Android 密码箱 3 不工作

Lockbox 3 for Android with XE7 not working

刚刚发现密码箱3.6.0应该支持Android。但是,当我查看调色板时,我发现编解码器仅支持 win32 和 win64。

如何让它也适用于我的 android 应用程序?

我正在使用 Delphi XE7 并且已经按照包中提供的安装说明进行操作。对于 windows 应用程序,它工作正常。

你有两个选择:

(1) 运行-时间

您始终可以在 运行 时创建组件。有一个关于如何做的example on the website,我在下面复制了这个例子的一个片段。只需将 ShowMessage() 函数替换为合适的函数即可...

procedure EncryptAStream( Plaintext, Ciphertext: TStream);
var
 Codec1: TCodec;
 CryptographicLibrary1: TCryptographicLibrary;
begin
ShowMessage( 'Demonstration of How to Encrypt a Stream with TurboPower LockBox 3.');
Codec1 := TCodec.Create( nil);
CryptographicLibrary1 := TCryptographicLibrary.Create( nil);
Codec1.CryptoLibrary  := CryptographicLibrary1;
Codec1.StreamCipherId := uTPLb_Constants.BlockCipher_ProgId;
Codec1.BlockCipherId  := 'native.AES-256';
Codec1.ChainModeId    := uTPLb_Constants.CBC_ProgId;
Codec1.Password := 'my utf-16le password';

// Codec1.Reset;  Reset if you are continuing from a previous encryption operation.
Codec1.EncryptStream( Plaintext, Ciphertext);
// Codec1.Burn;   Burn if you need to purge memory of sensitive data.

Ciphertext.Position := 0;

ShowMessageFmt(
 'The ciphertext for AES-256 with CBC chaining'#13#10 +
 ' of plaintext ''banana'' (UTF-8 encoding),'#13#10 +
 ' and password ''my utf-16le password'' (UTF-16LE encoding),'#13#10 +
 ' prepended by 64 bit nonce, (being the IV),'#13#10 +
 ' and rendered for display in base64 is ...'#13#10 +
 '%s', [Stream_to_Base64( Ciphertext)]);

Codec1.Free;
CryptographicLibrary1.Free;
end;

(2) 设计时

需要进行一些调整才能将组件添加到 Android 的调色板中。这将在即将发布的下一个版本的 TPLockbox 3 中为您完成,但现在,这里是程序 ...

  1. 从 TPLB3 运行 时间要求中删除 vclvclimgdbrtl
  2. 对于 运行-time 包,添加 Android 目标平台,并使其成为活动平台。但是当然,不要将此平台添加到设计时包中。
  3. 运行 时代的二进制产品应命名为 libTP_LockBox3_XE7.so,其中 XE7 是您的编译器版本的位置标记。
  4. 在两个组件(TCodec 和 TCryptographicLibrary)的声明前加上

    [ComponentPlatformsAttribute( pidWin32 or pidWin64 or pidOSX32 or pidiOSSimulator or pidiOSDevice or pidAndroid)]
    TCodec = class( TTPLb_BaseNonVisualComponent, ICryptographicLibraryWatcher,
                     { etc. }
    

这是整件事的关键。 ComponentPlatformsAttribute attribute 声明组件应该在调色板上显示的平台。如果没有声明,我相信默认是 pidWin32 or pidWin64,但我无法指出任何官方文档来支持这一点。

  1. 重新编译 运行-time 包。请记住,如果您使用 MS-BUILD 进行编译,在某些编译器版本上,您需要 save-all 才能成功编译。
  2. 转到 IDE 工具 |选项并打开 Android 平台的库路径。确保此路径包含放置 Android 案例的 dcu 文件的位置。例如,在我的安装中它是 ...

    C:\Dev\TPLB\work-products\ephemeral\dcu\XE6\Android

您应该亲自检查一下这个目录。例如,它应该有一个名为 TPLB3.AES.dcu 的文件和另一个名为 TPLB3.AES.so 的文件。

  1. 重新编译并重新安装设计时包
  2. 打开您的移动项目。在 Android 表单上为 TCodec 和 TCryptographicLibrary 添加设计时组件。按照 windows 申请的方式进行。