Node.js 使用公钥节点验证签名

Node.js 使用公钥节点验证签名,node.js,rsa,public-key-encryption,Node.js,Rsa,Public Key Encryption,我有一个签名的数据被传递到我的服务器,以及十六进制格式的公钥,该数据是用它签名的。哈希算法对于所有请求sha-256都是相同的,但是每个请求的公钥都不同,因为rsa public+private对是在客户端生成的 所以我的问题是-我如何用十六进制格式的公钥验证签名?在node的crypto文档中,我看到我需要一个pem格式的文件,但我没有。实际上,这类请求会很多,所以创建这些文件并不好。不要。认真地不要。滚你自己的眼泪 相反,请使用https,或者,如果您确实必须自己使用https,请尝试实现D

我有一个签名的数据被传递到我的服务器,以及十六进制格式的公钥,该数据是用它签名的。哈希算法对于所有请求sha-256都是相同的,但是每个请求的公钥都不同,因为rsa public+private对是在客户端生成的


所以我的问题是-我如何用十六进制格式的公钥验证签名?在node的
crypto
文档中,我看到我需要一个pem格式的文件,但我没有。实际上,这类请求会很多,所以创建这些文件并不好。

不要。认真地不要。滚你自己的眼泪


相反,请使用https,或者,如果您确实必须自己使用https,请尝试实现Diffie Hellman。至少在DH中,您没有创建自己的算法。至于为什么这是坏的,考虑一个攻击者谁想读取您的数据。如果你只是在信上签字,那和现实生活中在信上签字没什么区别。这是你的签名,而且(大多数情况下)没有其他人能做到。但是如果我偷了你的那封信,写下我自己的,并用我的签名(用你的名字)在信上签名,收件人就会知道那不是你的。但是等等!如果您以前从未联系过此收件人怎么办?他们不知道是谁用你的名字写的和签的。真的是你吗?还是我?您需要进行密钥交换以防止这种情况。

这实际上取决于数据签名的格式。我们需要更多的信息来帮助你。此外,如果在客户端为每个请求重新生成签名密钥,则服务器无法知道它们是什么,甚至无法知道要验证什么。您需要一种拥有持久密钥的方法,即使是通过一个会话,也要有验证的希望。否则,你所有的密码都没用了。嗨,@Avery。基本上,在客户端我有一个字符串
str
。然后生成一对私钥和公钥,并使用私钥创建签名
sig=sha256(str)
。在下一步{
str
sig
public_-key
以十六进制格式}发送到服务器。在服务器上,我需要验证签名。为什么?如果您发送带有签名数据的pubkey,那么拦截器(我猜您正试图保护它)也可以更改密钥。你不能在这里使用diffie-hellman算法吗?它会让你确切地知道数据从哪里来,它实际上会工作。你是说拦截器可以将
str
更改为他喜欢的任何内容,然后用自己的密钥签名并发送到服务器?但是,在我的例子中,
str
可能包含一些他不知道的额外数据(比如……专门生成的伪随机数)。但是,他可以更改
str
的其他部分。因此,我需要使用sha256对其进行散列,以使用密钥验证+签名以获得额外的安全性,但您没有加密。你在签字。差别很大。不要试图制作你自己的密码,它不可避免地会回来咬你。查看如何进行正确的密钥交换(例如diffie hellman)并正确加密数据。如果可以,只需使用预先制作的SSL/TLS系统即可确保一切安全。