- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要实现几个符合以下条件的函数:
函数 genKey:给定一个字符串 q(这可能是 MD5 或 SHA 哈希)和一个种子字符串,该函数必须生成一个新的字符串 p
函数 checkKey:如果字符串 p 是从字符串 q 生成的(使用前面的函数),则此函数必须返回 true
在伪代码中,上面的内容是这样的:
p=genKey(q,seed) ; // generate string p from q and seed
checkKey(p,q)==true ; // if p was generated from q, then this must return true. False otherwise.
有谁知道现有的算法可以做这样的事情吗?
如果没有已知的 PHP 实现,我可以自己实现这些算法,所以我真正要求的是完成这个过程的过程。
最佳答案
听起来您可能正在尝试描述 MAC。
消息验证码采用消息摘要、 secret 和消息。 secret 和数据一起散列,结果包含在消息中。
知道 secret 的消息接收者可以执行相同的摘要计算,并将他的 MAC 与接收到的消息附带的 MAC 进行比较。如果它们相等,他就可以相信消息没有被更改。
鉴于您的意见,我现在了解到您正在使用非对称 key ,而不是将在 MAC 中使用的 secret key 。
然而,还是有一点困惑。通常,私有(private)签名 key 由其所有者保密,在本例中似乎是客户端。客户可以在不公开私钥的情况下以加密方式证明他们拥有与公钥相对应的私钥。
使用数字签名,你可以做这样的事情:
p = genKey(pvt, seed)
checkKey(pub, p)
这里,pvt
是服务器的私钥,pub
是它的公钥。 seed
参数是被签名的数据。如果我了解您的应用程序(对此我表示怀疑),seed
应该是客户端标识符。那么p
就是将seed
和它的签名捆绑在一起的消息格式。您的问题令人困惑,因为 q
用于生成和验证 p
— 就像共享 secret 一样。
但是,这个方案(或 MAC 方案)中没有任何内容可以阻止一个客户端使用另一个客户端的 p
值。使用这种技术所能做的就是确保消息内容没有被更改。例如,如果消息类似于“clientID=Alice,IPAddress=192.168.1.1”,您可以确保 Mallory 没有用自己的 IP 地址替换 Alice 的 IP 地址。
但是如果消息只是“clientID=Alice”,你就无法阻止 Alice 将她的防篡改消息给 Bob(作为分摊许可成本的返回),你也无法控制 Mallory 是否破解进入爱丽丝的盒子并窃取消息。
顺便说一句,如果消息完整性真的是您所需要的,并且您可以轻松地在发送方和接收方之间共享 secret ,那么 MAC 相对于公钥密码术有一些很好的优势,例如更小的消息大小和更快的性能.
概述您要防御的威胁。密码学很难。设计未经尝试的方案通常以失败告终。
关于php - 将在 PHP 中实现的简单密码学问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/762221/
我有两个关于这段代码的问题。 double*** pdata 和 int*** pmask 是什么意思?指向指针的指针?为什么或何时需要这样做? int 和 double 是不同的类型,double*
谁能用英文解释一下这是怎么回事? std::vector cats; //I get that cats is a vector of Cat objects if (std::find(cats.b
在C中,下列声明有区别吗: float DoSomething( const float arr[] ); 对比 float DoSomething( const float* arr ); 一个比另
我到 question 36我认为这很简单。像往常一样,我显然错了。我正在尝试在 Python 中执行此操作(因为我不知道 Python)。我的代码如下。我得到 19 作为输出,这显然是不正确的。我不
我已经通读了 MSDN 上的 Winsock2 文档,但如果有人能提供帮助,我仍然需要澄清一些事情。 我计划做一些类似于您在使用 WSAAsyncSelect() 时获得的设置,但使用一个单独的线程。
#include int main () { int *p = (int *)malloc((100*sizeof(int))); p++; free(p); /* do some
我想提供未知的“对象”并返回其成员之一的值。在 C# 中需要响应。 一般来说,我想我正在寻找这个方法的代码公共(public)静态对象 GetObjectMemberValue (object myO
由异常准确的 AI 提供支持的 20 个问题的简单在线游戏。 他们怎么猜得这么好? 最佳答案 您可以将其视为二进制搜索算法。在每次迭代中,我们都会提出一个问题,该问题应该会消除大约一半的可能单词选择。
拜托,有人可以解释一下吗: 如果文档说 STL std::vector finding element speed performace = O(ln(n)),这是什么意思。 O(ln(n)) - 什
我正在尝试通过遵循 Microsoft 为 ADSI API 和 Windows-RS crate 发布的 c++ 示例来使用 Rust 的事件目录。我不太明白这里发生了什么: https://doc
这是处理具有重复元素的单个列表的 nieve 案例,我在处理一些嵌套列表时遇到了麻烦,所以我想先写简单的案例。 所以我有: (defn packDuplicatesIntoLists [lis
我是新来的。我正在尝试解决此练习 Problem 18只是为了加强我的解决能力。我已经编码了答案。该任务要求“在 1,000,000 以下的质数中,有多少个数位之和等于两周中的天数?” (两周是 14
我正在尝试对POCO类中的某些字段进行索引,并将某些属性装饰为“忽略= true”,并且这些字段不应被索引,而应该被存储。我希望这些字段出现在搜索结果中,但不应作为索引。 我正在尝试对应索引的几个字段
我是编码的新手,正在尝试通过完成 Project Euler 问题来学习 Swift。我似乎有导致大量错误的不同版本的 Swift 代码。如果您对我的问题的格式有任何建议以供将来引用,请告诉我,谢谢。
对于problem statement在 google codejam 2008:第 1A 轮问题 3 In this problem, you have to find the last three
我是一名优秀的程序员,十分优秀!