- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 Delphi 中使用 3DES 加密一个 10 字节字符串。
它必须得到与此 PHP 代码相同的结果:
function encrypt_3DES($message, $key){
$bytes = array(0,0,0,0,0,0,0,0);
$iv = implode(array_map("chr", $bytes));
$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
return $ciphertext;
我一直在尝试使用 DCPCrypt 和 LockBox 3 对其进行编码。我最终放弃了 DCPCrypt,因为它最近没有更新,而且我不确定它是否可以与 Delphi 10.1 Berlin 一起正常工作,所以我专注于 LockBox 3,但我无法正确加密。
加密 key 是一个 24 字节 key (我有它的 Base64 表示形式)。我找不到如何使用 LockBox 的 TSymetricKey 类创建此类 key 并将其传递给 Codec.Init 方法。所以我把它放在 AnsiString 上并将其设置在 Password 属性上(尽管文档说有一个 utf8Password 但我找不到它)。
然后有一个名为 EncryptAnsiString 的方法,但它再次需要字符串(Delphi 10.1 Berlin 上的 utf16)而不是 AnsiStrings(尽管文档说相反),所以我对结果与我的结果不匹配并不感到惊讶正在寻找(在该 PHP 代码段上加密的相同值)。
这是我的德尔福代码:
function Encrypt(Data: AnsiString; LocalKey: AnsiString): AnsiString;
var
BinaryLocalKey: TBytes;
strLocalKey, strTripleDes: AnsiString;
begin
BinaryLocalKey := DecodeBase64(LocalKey);
setString(strLocalKey, PAnsiChar(@BinaryLocalKey[0]), Length(BinaryLocalKey));
Codec1.Rest;
Codec1.Password := strLocalKey;
Codec1.EncryptAnsiString(Data, strTripleDES);
Codec1.Reset;
Result := strTripleDes;
end;
但是这段代码不仅没有得到与 PHP 代码相同的结果,而且每次调用时它都会为相同的输入返回不同的结果。
注意:Codec1 是链接到 TCryptographicLibrary 组件的组件,其属性 ChainMode 设置为 CBC*,Cipher 设置为 3DES( key 选项 1)
有人知道如何正确获取此 3DES 加密吗?
谢谢。
最佳答案
为每条消息生成一个随机 IV。 IV 的低 8 字节是随机数,高字节为零。这些低 8 个字节被添加到输出之前。
如果您想通过旁路发送 IV,则从标称密文中去除前 8 个字节。
如果您想控制 IV,请使用版本 3.7.0 ( https://github.com/SeanBDurkin/tplockbox )。您需要设置高级选项并实现 OnGetIV 方法。
在密码选择和链模式选择的属性编辑器中呈现的星号 (*) 表示该选择是推荐选择。
关于delphi - 使用 Delphi 10.1 Berlin 使用 3DES 加密字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848195/
我有一个combobox,其中包含以下手动输入的值:Active,Inactive。但是我只想在数据库中保存值A或I。如何通过livebindings执行此操作? 最佳答案 FillDataSourc
我很惊讶不是 get 除以零异常。我该如何取回它? Berlin 10.1 最近安装,新项目, procedure TForm1.Button1Click(Sender: TObject); var
我正在尝试使用 MySQL 实现带有用户身份验证的 SOS-Berlin JobScheduler,但它会抛出如下所示的错误:网址 http://127.0.0.1:40444运作良好。 请建议我这样
我要疯狂地尝试安装这个。我编辑了 xml 配置并安装了 mysql、java。由于某种原因,没有安装任何东西。 当我运行 setup.sh 脚本时,我得到: ./setup.sh -u jobsche
我有最新的 delphi 和 xcode 等运行 iphone sdk 10.2。有没有办法设置一个新平台并构建说 ios 9?我的 sdks 列表仅显示 10.2。不确定是否支持老年人手机等 最佳答
我希望我可以从一个组件中安装一些帮助文件,其中包括通过 XE7 到 Delphi 10.1 Berlin 的帮助。我知道它涉及使用 H2Reg。它包括从 2009 到 XE7 的 Delphi 版本的
我有一个适用于 Delphi 和 Lazarus 的装置。在 Lazarus 中,该单元编译时没有任何异常,但在 Delphi 中,它给我错误数据类型太大:超过 2 GB。下面是代码: unit UT
我安装了GraphicEx (Delphi 图像加载器库)在 Delphi 7 中运行良好。 现在,当我尝试在 Delphi 10.1 Berlin 中安装它时,出现错误: [dcc32 Error]
需要帮助..我正在使用delphi 10.1 berlin。与之前版本的 Embarcadero Delphy Code Gear 有一些不同。我需要更改 TGrid 行中的字体颜色。在下一个代码中,
我正在尝试在 Delphi Berlin 10.1 中创建 XML我需要获取这样的文件: IT 01234567890
执行 ./graphhopper 时收到错误消息进口用于创建图形数据。 有人可以帮助我吗? 最佳答案 这是一个错误 fixed 5 days ago 。在这些情况下,您始终可以尝试稳定的版本,例如导入
我正在使用 Delphi-Berlin Update-2 Android 服务不能使用 log.d(),因为它需要使用 FMX.Types,使用它会导致整个应用程序崩溃。 我试图从 FMX.Types
我正在尝试为我的 firemonkey 列表框创建自定义 ListBoxItem 样式。我需要在每个项目上有 2 个标签、2 个进度条和 3 个按钮。 这三个按钮应该全部右对齐。其余控件应排成 2 行
我需要在 Delphi 中使用 3DES 加密一个 10 字节字符串。 它必须得到与此 PHP 代码相同的结果: function encrypt_3DES($message, $key){ $byt
我想使用 Gabriel Corneanu 的 jpegex ,jpeg.TJPEGImage 的类帮助器。正在阅读this和this我了解到,除了 Delphi Seattle 之外,您无法再像 j
如何通过 delphi 在 OS X 上创建文件/文件夹?我正在尝试使用函数 System.SysUtils.FileCreate 和 System.IOUtils.TDirectory.Create
我在 Delphi 10.1 Berlin 中使用 Windows 作为主视图创建了一个应用程序。我在表单上放置了一个 TListView,并使用新的切换设计模式对其进行了自定义。我添加了一个 TIm
我目前正在使用Open Source Jobscheduler通过文件 (jobscheduler_linux.1.3.12.3137.tar.gz) 安装版本 1.3.12.3137。 以前他们只有
我尝试在设计器中配置的 TPanel 上使用分配,但它不起作用。 var LPanel : TPanel; begin LPanel := TPanel.Create(nil); LPan
我有一个 COM DLL 项目,我能够在 Delphi 2007 和 XE8 中对其进行调试(在断点处停止)。 但是,IDE 在 Delphi 10 Seattle 或 10.1 Berlin 中似乎
我是一名优秀的程序员,十分优秀!