- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有使用 Zend_Crypt_DiffieHellman 类的示例?我正在尝试编写一个桌面应用程序,它将以安全的方式与 Zend Framework 上的 PHP 服务器进行通信。我一直在理解如何在两方之间建立共享 key 。我需要获得一组我自己的素数吗?
任何有关如何使用它来获取共享 key 的示例将不胜感激!
我认为我真正的问题是如何获得素数和它的生成器!
最佳答案
我绝不是密码学专家,但我认为您应该使用 RFC 2412 - The OAKLEY Key Determination Protocol (appendix E.1) 中定义的“知名组”或来自 RFC 3526 的组.在将它们与 Zend_Crypt_DiffieHellman
一起使用之前,您可能必须先将十六进制数转换为十进制数。
越大越好 - 不,开个玩笑。
取决于您计划如何实现 key 交换。如果你必须在每个 HTTP 请求上执行 DH 交换,更大的组将杀死你的服务器,因为它需要更多的时间来计算(但另一方面更难破解)。在我的示例中,我使用了 768 位的“Well Known Group 1”,它相当慢(好吧,我的开发机器不是最快的)。
您还可以添加服务器和客户端在第一步中同意使用哪个预定义组的选项。例如:您在应用程序中提供众所周知的组 1、2 和 5。在实际的 DH key 交换之前,你们双方同意使用组 1 进行实际的 DH key 交换。这样您就可以在硬件 catch 时切换到更大的组。当然,此组协议(protocol)为您的 key 交换过程增加了另一个步骤。
Zend_Crypt_DiffieHellman
例子这是一个简单的示例,实际上没有将公共(public)数据传输到另一个进程。
// why disable the use of openssl?
// apparently "computeSecretKey" uses the php function
// openssl_dh_compute_key which expects an openssl "pkey" resource but
// the Zend Framework (1.11.4) supplies a string
Zend_Crypt_DiffieHellman::$useOpenssl = false;
// here I define the Well Known Group 1 (which consists of the prime and
// the generator) with a 768 bit prime.
// These can be either hard coded ore your parties agree on which group to
// use in a separate step of the key-exchange process.
$public_prime =
"155251809230070893513091813125848175563133404943451431320235" .
"119490296623994910210725866945387659164244291000768028886422" .
"915080371891804634263272761303128298374438082089019628850917" .
"0691316593175367469551763119843371637221007210577919";
$public_generator = 2;
// if you want it to go fast use smaller values (these are from the
// Diffie Hellman entry on Wikipedia).
//$public_generator = 5;
//$public_prime = 23;
$bob = new Zend_Crypt_DiffieHellman($public_prime, $public_generator);
$alice = new Zend_Crypt_DiffieHellman($public_prime, $public_generator);
// first generate the private key and the public data on both sides
$bob->generateKeys();
$alice->generateKeys();
// you can access the public data using the "getPublicKey" method.
// You can transmit those values over the wire to the other party.
echo "bob=", $bob->getPublicKey(), PHP_EOL;
echo "alice=", $alice->getPublicKey(), PHP_EOL;
// After both parties have received the public data from the other party
// they can calculate the shared secret:
echo "shared(alice)=", $alice->computeSecretKey($bob->getPublicKey()), PHP_EOL;
echo "shared(bob )=", $bob->computeSecretKey($alice->getPublicKey()), PHP_EOL;
// the values should be equal.
唯一真正通过线路传递的是 Zend_Crypt_DiffieHellman::getPublicKey
的返回值。公共(public)数据可以编码为文本(Zend_Crypt_DiffieHellman::NUMBER
)或二进制数据(Zend_Crypt_DiffieHellman::BINARY
)。
还有另一个:Zend_Crypt_DiffieHellman::BTWOC
,它与二进制相同但有前导零字节,所以整数不被视为“有符号”整数 - 如果您的客户端应用程序使用Java JCE 或 .NET Crypto API 这一个可能是二进制传输的最佳选择。
如果您想让您的生活更轻松,不要重新发明 SSL - 只需通过 HTTPS 使用现有的 SSL 实现即可。
大多数 SSL 库允许您检查服务器证书,因此请检查客户端服务器证书的有效性(至少检查指纹)。
如果您需要或想要,您可以在服务器上检查客户端的证书(参见 Using SSL Client Certificates with PHP)。
关于zend-framework - Zend_Crypt_DiffieHellman - 用法示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176708/
嗨,我有一个包含此代码的 Zend 表单 $field = new Zend_Form_Element_Submit('submit'); $field->setAttrib('class', 'bt
我现在正在尝试使用 zend expressive 并研究如何处理数据库。我在看this ,但不清楚。我使用 composer 安装 zend-db,它提到在 dependencies.global.
我已经通过 Zend auth 创建了一个登录系统,这里是代码 // userAuthentication public function authAction(){ $reque
好的,所以我对 Zend 比较陌生。我已经创建了一个新的应用程序并开始构建基于 a guide 的身份验证系统.但是,服务器正在踢出一个内部服务器错误。 检查 PHP 错误日志后,我得到以下两个错误:
编辑:: 问题是由 Zend 路由引起的,请检查更新 我正在使用 xml 文件进行导航。 编辑::以下代码来自layout.phtml文件 $config = new Zend_Config_Xml(
我想将变量从 Controller 传递到表单。如何实现?谁能帮我解决这个问题。 谢谢。 最佳答案 只是一个活生生的例子: class Admin_Form_Product extends Admin
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我使用默认 Zend_Rest_Route 来生成 Rest 路由: 所以鉴于我只是把 resources.router.routes.rest.type = Zend_Rest_Route在 app
是否存在类似于 Zend Validator Identical 的 Zend Filter? 我应该过滤 input=='test' 的情况 $el->addFilter('Identical','
在/application 文件夹中创建了几个文件夹(例如表单和模型),然后开始向这些文件夹添加类之后,如何使这些类的代码自动完成在我的各种其他文件(例如我的文件)中可用IndexController
我正在尝试删除隐藏表单元素上的默认装饰器。默认情况下,隐藏元素显示如下: Hidden Element Label (if I had set one) 我不希望隐藏元素占用页面上的空间。我想删除所
我是框架新手,但我在安装 zend 1.x 版本等方面没有任何困难。但是ZF2真的搞不懂......任何资源告诉我使用 zend 工具创建项目,即 bin 目录中的 zf.bat 或 zf.sh,但与
我想使用装饰器将下面的 Zend_Form 格式化为表格,在第一列中放置描述并 Zend_Form_Element_Radio 的选项在第二列中和 在每一行中添加 2 个选择,您可以在稍后的 html
当您查看 在下面的标记中,您会看到有一个带有 id 地址标签的 dt 和以下 dd,我想删除这些但保留 字段集。 要添加显示组,我在其中使用了这个 $this->addDisplayGroup(arr
我已经阅读了所有关于路由和 Zend 文档的帖子,但我仍然无法解决这个问题。 我有一个包含两个模块的多语言应用程序:default 和 admin。语言选择工作正常(在 Controller rout
/* Form Elements & Other Definitions Here ... */ $this->setAction("auth") ->setMethod("post")
我正在按照官方教程在 Zend 服务器上部署示例 Zend 应用程序。无论我部署什么,我唯一可以访问的是 hello world 页面(Hello world 打招呼)。 如何访问真实应用程序? ho
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
在 Zend 中使用命名空间的最佳实践是什么? 如何管理存储库、服务等的命名空间? 我在 Zend 文档 here 中找到了一个通用的目录结构,但它没有描述在哪里放置存储库和其他服务! 请将其视为 M
我有问题,以下 Zend 表单会引发错误。 问题是"file"元素和使用 setElementDecorators。 class Products_AddForm extends Zend_F
我是一名优秀的程序员,十分优秀!