我无法使用Node的加密模块为私钥所有权创建签名。如何使用以下十六进制的公钥和私钥:
const crypto = require("crypto");
const ecdh = crypto.createECDH("secp256k1");
ecdh.generateKeys();
const privateKey = ecdh.getPrivateKey("hex");
const publicKey = ecdh.getPublicKey("hex");
ECDH -是为加密算法生成秘密的算法。
你应该计算secret,它依赖于另一个公钥:
const secret = ecdh.computeSecret(anotherPublicKeyInHex, 'hex');
并在cipher/decipher中使用:
crypto.createCipheriv('some-algorithm', secret, initialVector, options);
crypto.createDecipheriv('some-algorithm', secret, initialVector, options);
如果你不知道你能用它做什么,就不要用它。首先,你需要阅读更多关于加密算法、生成秘密的算法等方面的信息。
https://en.wikipedia.org/wiki/Public-key_cryptography
https://en.wikipedia.org/wiki/Key_generation
https://en.wikipedia.org/wiki/Elliptic-curve_cryptography
ECDH是密钥协议,不是签名生成。DH毕竟是Diffie-Hellman。
试试另一个例子,比如ECDSA (EC数字签名算法)。是的,示例中没有DSA这个词,但这只是蹩脚的API设计(对不起,没有其他词可以形容)。当然,你需要用"secp256k1"
代替给定的曲线名称;我刚刚测试过了,它可以工作。
请注意,原则上,公钥和私钥的形式与您创建的相同,因此,原则上,您可以使用ECDH密钥对生成,然后使用链接的ECDSA。作为源代码,它没有任何意义(由于文档稀疏,我无法使其工作),但从数学上讲,它应该是可能的。