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 中为您完成,但现在,这里是程序 ...
- 从 TPLB3 运行 时间要求中删除
vcl
、vclimg
和 dbrtl
。
- 对于 运行-time 包,添加 Android 目标平台,并使其成为活动平台。但是当然,不要将此平台添加到设计时包中。
- 运行 时代的二进制产品应命名为
libTP_LockBox3_XE7.so
,其中 XE7
是您的编译器版本的位置标记。
在两个组件(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
,但我无法指出任何官方文档来支持这一点。
- 重新编译 运行-time 包。请记住,如果您使用 MS-BUILD 进行编译,在某些编译器版本上,您需要
save-all
才能成功编译。
转到 IDE 工具 |选项并打开 Android 平台的库路径。确保此路径包含放置 Android 案例的 dcu 文件的位置。例如,在我的安装中它是 ...
C:\Dev\TPLB\work-products\ephemeral\dcu\XE6\Android
您应该亲自检查一下这个目录。例如,它应该有一个名为 TPLB3.AES.dcu
的文件和另一个名为 TPLB3.AES.so
的文件。
- 重新编译并重新安装设计时包
- 打开您的移动项目。在 Android 表单上为 TCodec 和 TCryptographicLibrary 添加设计时组件。按照 windows 申请的方式进行。
刚刚发现密码箱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 中为您完成,但现在,这里是程序 ...
- 从 TPLB3 运行 时间要求中删除
vcl
、vclimg
和dbrtl
。 - 对于 运行-time 包,添加 Android 目标平台,并使其成为活动平台。但是当然,不要将此平台添加到设计时包中。
- 运行 时代的二进制产品应命名为
libTP_LockBox3_XE7.so
,其中XE7
是您的编译器版本的位置标记。 在两个组件(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
,但我无法指出任何官方文档来支持这一点。
- 重新编译 运行-time 包。请记住,如果您使用 MS-BUILD 进行编译,在某些编译器版本上,您需要
save-all
才能成功编译。 转到 IDE 工具 |选项并打开 Android 平台的库路径。确保此路径包含放置 Android 案例的 dcu 文件的位置。例如,在我的安装中它是 ...
C:\Dev\TPLB\work-products\ephemeral\dcu\XE6\Android
您应该亲自检查一下这个目录。例如,它应该有一个名为 TPLB3.AES.dcu
的文件和另一个名为 TPLB3.AES.so
的文件。
- 重新编译并重新安装设计时包
- 打开您的移动项目。在 Android 表单上为 TCodec 和 TCryptographicLibrary 添加设计时组件。按照 windows 申请的方式进行。