Delphi 和 PHP 中的安全密钥对加密解决方案?

2023-12-05

我的应用程序通过互联网发送加密文件,我需要能够执行以下操作:

  1. (客户端 Delphi 2010):使用加密文件公钥随我的应用程序一起提供并上传到服务器
  2. (服务器端 PHP):使用我的解密上传的文件私钥存储在服务器上
  3. (处理上传的文件...)

听起来很简单,但我找不到任何可靠的代码/组件,我找到了这些组件:

  1. DCPcrypt。这是我现在在开发中使用的,但似乎不支持基于密钥对的加密(RSA?)

  2. GnuPgp(GPL)所以我不能在我的商业应用程序上使用它。

  3. TurboPower 锁箱 3:确实支持密钥对加密,但非常神秘(据我所知没有文档)并且似乎不支持文件加密。

我的问题是:有没有安全/可靠加密组件:

  1. 实现我上面描述的(即密钥对加密)
  2. 可以使用PHP解密
  3. 适用于大文件/流
  4. (在这里做梦!)有一个简单的 delphi/php 演示来展示如何做到这一点吗? :)
  5. 请仅使用自由和开源解决方案,我已经超出预算了:)

我会选择 OpenSSL。
PHP 似乎对它有很多支持,尽管我还没有真正尝试过: 例如手册 and 这里有一个例子.

使用我在这里多次提到的内容,只需做一些工作,就可以使 Delphi 与 OpenSSL 很好地配合使用:http://www.disi.unige.it/person/FerranteM/delphiopenssl/。该页面上也有一些很好的例子。并查看 Indy OpenSSL 导入。

不是特定的组件,但绝对免费、灵活,并且完全有可能向自己开枪,安全方面,在脚上:-)

EDIT:

对于 Delphi,我会考虑使用 EVP_Seal* 函数,您可以在以下位置找到我的精简版 libeay32.pas 文件:这个答案。您需要这个,因为 Indy 没有显示或实现很多/任何实际的 EVP_ 函数,因此您需要导入函数声明和一些其他例程。

For PHP 这个链接似乎是正确的对手。

作为奖励,这应该让您了解如何使用 EVP_Seal* 东西(未经测试):

function EVPSeal(ASource: TBytes; const APublicKey: PEVP_PKEY; out Key: TBytes; out IV: TBytes): TBytes; 
var
  cipher: PEVP_CIPHER;
  ctx: EVP_CIPHER_CTX;
  buf: TBytes;
  block_size, buf_start, out_len, keysize: integer;
  ek: array[0..0] of PByte;
  ekl: array[0..0] of integer;
  pubk: array[0..0] of PEVP_PKEY;
begin
  keysize := EVP_PKEY_size(APublicKey);
  cipher := EVP_aes_256_cbc;
  SetLength(IV, EVP_MAX_IV_LENGTH);
  SetLength(Key, keysize);
  ek[0] := @Key[0];
  pubk[0] := APublicKey;
  buf_start := 0;
  EVP_CIPHER_CTX_init(@ctx);
  try
    EVP_SealInit(@ctx, cipher, @ek[0], @ekl, @IV[0], @pubk[0], 1);
    block_size := EVP_CIPHER_CTX_block_size(@ctx);
    SetLength(buf, Length(ASource) + block_size);
    SetLength(Key, ekl[0]);
    EVP_SealUpdate(@ctx, @buf[buf_start], out_len, @ASource[0], Length(ASource));
    Inc(buf_start, out_len);
    EVP_SealFinal(@ctx, @buf[buf_start], out_len);
    Inc(buf_start, out_len);
    SetLength(buf, buf_start);
    result := buf;
  finally
    EVP_CIPHER_CTX_cleanup(@ctx);
  end;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi 和 PHP 中的安全密钥对加密解决方案? 的相关文章

  • 计算 RSA 128 位密钥长度需要多长时间? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在网上做了一些研究 似乎表明 RSA 加密的推荐密钥长度是 1024 位 但是我有一个问题 对于今天使用的普通计算机来说 计算 128 位 RSA
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 每次 TDbGrid 的选定位置更改时都会触发什么事件?

    我的项目中有一个 TDbGrid 每次更改所选行时我都试图触发一个事件 行中的任何更改都已经更新了链接到同一数据源的所有数据感知控件 但还需要进行其他更改 我需要一个事件处理程序 我认为 OnColEnter 会起作用 根据帮助文件 它在以
  • 为什么 {$ifopt FINITEFLOAT ON} 无法编译?

    我有这样的构造 ifopt FINITEFLOAT ON message FINITEFLOAT option ON else message FINITEFLOAT option OFF endif 在我的源代码中 它不会编译 这一定是一
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • 什么是“声明式安全”?一般来说

    这个问题的答案 声明式安全 这是什么 https stackoverflow com questions 1210609并没有告诉我太多 坦率地说 根本没有告诉我任何事情 我看到一篇关于 NET 性能的博客 其中提到了这一点 您使用声明式安
  • 所见即所得与 Unicode

    我在 Delphi 中编写了一个 Windows 程序 该程序使用 GetCharWidth 和 Em Square 将文本非常精确地放置并换行到屏幕和打印机 这对于 ANSI 文本效果很好 您只需要检索和计算 255 个字符的宽度 但当您
  • Symfony2 Secure by IP 不起作用

    在我的 Symfony 2 3 1 Security YML 中 我有这一行 安全 yml access control path mysecurearea roles IS AUTHENTICATED ANONYMOUSLY ip 0 0
  • TListView 中的中心子项目图像

    Is it possible to fix the drawing of subitem images in a TListView so that they are not cut off on the left hand side as
  • Java BigInteger bitLength() 方法忽略前导 0 位

    Java jre1 8 0 45 我完成了椭圆曲线类的调试 并在记录密钥的所有特征时 我还记录了密钥的位长度 对于椭圆曲线 其位长度并不总是偶数 我通过 BigInteger 显示密钥的位长度 ECPrivateKey oPK genera
  • PyCrypto:仅使用文件中的公钥解密(无私钥+公钥)

    大家好 我正在尝试使用 RSA 公钥和私钥以及加密 解密PyCrypto我遇到了一个对我来说似乎有点奇怪的问题 它现在的工作方式可能很有意义 但我对 RSA 非对称加密了解不多 这就是它让我困惑的原因 这是我遇到的无法解密只有公钥的东西 事
  • 命名管道性能问题

    我使用命名管道进行 C 和 Delphi 之间的过程间通信 C 使用System IO Pipes包 而 Delphi 使用Libby s pipes pas 不幸的是 通信几乎是高性能的 分析显示通信占用了整个运行时间的 72 其余的用于
  • 新标签页和浏览器窗口中的 CSRF 令牌

    我通过以下方式在我的nodejs服务器上实现了CSRF攻击预防 登录时的用户会收到 CSRF 令牌和 cookie 存储在 cookie 中的基于 JWT 的令牌 CSRF 令牌将成为客户端发送的所有未来请求标头的一部分 ajaxSetup
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • 使用 C#、BouncyCastle 和导入的 RSA 密钥进行 RSA 签名和验证 - 内部工作 Python 示例和非工作 C# 代码示例

    我一直在绞尽脑汁试图获得一个使用 C 和 BouncyCastle 进行 RSA 数据签名和验证的简单示例 在适用于我的 Python 和 M2Crypto 的示例中 RSACryptoServiceProvider VerifyHash
  • 将delphi stringgrid导出到excel

    我正在尝试将数据从delphi 7 中的stringgrid 导出到microsoft excel 我一直在使用这段代码来做到这一点 objExcel TExcelApplication Create nil objExcel Visibl
  • delphi THashSHA2 在大文件上返回错误的 SHA256

    Data Cloud CloudAPI pas has class function TCloudSHA256Authentication GetStreamToHashSHA256Hex const Content TStream str

随机推荐

  • 在jquery中使用多个id

    我制作了一个小 jquery 脚本来检查输入框值是否大于 5 但是我有 2 个带有 id 的标签 并且只有其中一个有效 div div
  • 根据类型打字稿创建对象

    免得说我有这种类型 type foo go string start string 如何动态创建一个将返回的函数 go start 在 Type Script 上 我们有什么方法可以仅基于类型动态生成空对象吗 或者这是不可能的 因为我们不能
  • 将单个 HTTP 标头的多个值添加到请求或响应的标准

    如果我想添加值列表作为 HTTP 标头 是否有标准方法可以做到这一点 我在 RFC 822 中找不到任何内容 我可以轻松理解 例如 是 逗号分隔值标准或分号分隔值 有标准吗 Example Key value1 value2 value3
  • C 中箭头运算符 (->) 的用法

    我正在读一本叫做 21 天自学 C 的书 我已经学会了 Java 和 C 所以我的学习速度要快得多 我正在阅读关于指针和 gt 箭 operator没有解释就出现了 我认为它用于调用成员和函数 就像相当于 点 运算符 但用于指针而不是成员
  • ASP.NET 中 APP_Data 文件夹的安全性

    我的 Microsoft Access DB 文件位于 APP DATA 文件夹中 我的服务器是 Windows 2003 我想知道保护此文件的最佳方法是什么 那么哪一种更安全呢 wwwroot App data 数据库 mdb or db
  • crti.o 文件丢失

    我正在使用 GNU 工具链构建一个项目 一切正常 直到我开始链接它 链接器抱怨它丢失 找不到crti o 这不是我的目标文件之一 它似乎与 libc 有关 但我不明白为什么它需要这个crti o 它不会使用库文件吗 例如libc a 我正在
  • 获取 GitHub 存储库的本地副本、跟踪更改并将更新推送回远程

    我在 GitHub 上有一个存储库 我想用对从中提取它的文件夹所做的更改来更新它 Git 新用户从使用的那一刻起就应该执行哪些步骤 不用行话或简写术语 cd directory 包括如何跟踪对任何文件所做的本地更改 以及如何将这些更改和更新
  • 一个框架。滚轮滚动放大

    我已经浏览了官方文档 但无法找到有关放大 缩小可能性的信息panorama图像 A 框架是否支持它 或者可能有一个解决方法可以阅读有关实现某些three js在它的上面 这可能是 2018 年更清洁的方式 我将 Aframe 相机的变焦限制
  • Laravel - 在标头中发送 api_token

    我正在为 Laravel 构建一个 API 我想在标头中发送 api token 而不是表单帖子 这是已经内置的东西还是我必须弄清楚如何创建自己的身份验证驱动程序 经过我自己的努力 我终于成功了 您需要首先遵循这个小教程 了解如何在 Lar
  • 从 Swift 访问 Azure 表存储

    我想从 Swift 访问 azure 表存储 制作标题的指令是here但是 我尝试构建请求但无法使其工作 let urlString https
  • 使用 PyGame 显示 PyMunk - Python

    我正在尝试学习 PyMunk 我使用了网站上的基本示例 import pymunk space pymunk Space space gravity 0 1000 body pymunk Body 1 1666 body position
  • 如何为包装 TableRow 的类指定/定义编码器

    我定义了一个类来包装com google api services bigquery model TableRow类将其定义为内部成员 public class TableRowWrapper implements Serializable
  • 结构填充

    我试图将文件中的数据块直接读取到结构中 但填充导致读取太多数据并且数据未对齐 我是否必须手动将每个部分读入结构中 或者是否有更简单的方法来执行此操作 My code 结构体 typedef unsigned char byte struct
  • 如何在backbone.js中通过全局变量创建集合?

    我在 stackoverflow 上得到了很多顾问的帮助 我的部分问题得到了解决 但还有一些问题仍然存在 我查阅了答案 并尝试解决问题 因为我理解了 javascript 命名空间模式 避免污染全局命名空间的命名空间模式 有关此命名空间模式
  • 闪亮的允许用户选择要显示的列

    我正在涉足闪亮的数据表功能 我有兴趣创建一个井面板或侧面板 列出数据表的所有列 并允许用户选择他们想要在数据表上看到的列 现在下面的代码显示玩具数据集的所有列mtcars library shiny runApp list ui basic
  • Sklearn MLP 特征选择

    带交叉验证的递归特征消除 RFEVC 不适用于多层感知器估计器 以及其他几个分类器 我希望在许多分类器中使用特征选择 执行交叉验证来验证其特征选择 有什么建议么 对于结构化数据 有一个独立于模型选择的特征选择 称为排列重要性 解释得很好he
  • 在 V8 中执行函数的具体执行次数是多少之后变得很热?

    我正在学习 V8 的内部工作原理 发现有 JIT 编译器 它可以通过内联缓存技术动态优化热函数 我只有两个问题 第一 函数只要连续执行几次就算热函数吗 其次 V8 中函数在重复执行多少次之后就会变热 V8 开发者在这里 函数的 热度 不仅仅
  • 静态方法内存消耗

    我有以下具有以下方法的类 public class Foo public string A get set public static Foo New string a Foo newFoo new Foo newFoo A a retur
  • TShellTreeView 在哪里?

    我正在尝试在 Delphi 10 Seattle 中编译一个旧项目并收到以下错误消息 类 TShellTreeView 未找到单击取消忽略 TShellTreeView是一个设计时组件 是ShellCtrls软件包 始终随 Delphi 一
  • Delphi 和 PHP 中的安全密钥对加密解决方案?

    我的应用程序通过互联网发送加密文件 我需要能够执行以下操作 客户端 Delphi 2010 使用加密文件公钥随我的应用程序一起提供并上传到服务器 服务器端 PHP 使用我的解密上传的文件私钥存储在服务器上 处理上传的文件 听起来很简单 但我