Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何加密像OpenSSL这样的私钥?_Node.js_Encryption_Openssl_Cryptography_Elliptic Curve - Fatal编程技术网

Node.js 如何加密像OpenSSL这样的私钥?

Node.js 如何加密像OpenSSL这样的私钥?,node.js,encryption,openssl,cryptography,elliptic-curve,Node.js,Encryption,Openssl,Cryptography,Elliptic Curve,使用OpenSSL生成私有椭圆曲线时,使用以下命令: openssl ecparam -name secp521r1 -genkey -noout -out key.pem 我得到这样的东西: -----BEGIN EC PRIVATE KEY----- MIHbAgEBBEGpyKy6t0i6cEdxETKfsXNmFA4oWLQrM1LaPdfiyGs13+DckCjskukK NlbQYBb7gKIAAqj4vbmdCjTkoxnuXToqRKAHBgUrgQQAI6GBiQOBhgAE

使用OpenSSL生成私有椭圆曲线时,使用以下命令:

openssl ecparam -name secp521r1 -genkey -noout -out key.pem
我得到这样的东西:

-----BEGIN EC PRIVATE KEY-----
MIHbAgEBBEGpyKy6t0i6cEdxETKfsXNmFA4oWLQrM1LaPdfiyGs13+DckCjskukK
NlbQYBb7gKIAAqj4vbmdCjTkoxnuXToqRKAHBgUrgQQAI6GBiQOBhgAEAHRbQ/Ow
rR0fjiLdS+wHgpGX3kIk1IdJwr6m18k8nkta7d6YCho555Tbru+17zrtEMasd5UH
YX8PRRtGaCD29aOzASUXOkwrmth4wLRsDQEe4qWAjATVvbw4LDP9Jz92OFXbEPwR
P3uNunAQ2grnBjNCXN5yF49nyK1lSZxscxv+OCM/
-----END EC PRIVATE KEY-----
它的格式与我使用NodeJS的加密模块和密钥编码器混合生成的格式相同:

-----BEGIN EC PRIVATE KEY-----
MIHcAgEBBEIBevCX7Zvo2G93UtPEl2ibpz71dXdjN/xMbwZBQwHukZJWwuKtJ8Sm
dn21nDV5uEa7mgiBu0X5BVvsN/Wr+TzoAD2gBwYFK4EEACOhgYkDgYYABABaycjM
EduL5R+bBY7T5WF+L314mfm2AZkKDs4EDkYWPupzbfE1qsQkjyPjh/JxMRU6nr9w
xJ7X9jSA6wy0dHNqSQFP+5SHOuJu32Da21qBIKU9Xaoy0CloGfRjEQAbg5N1h4uw
wKdMrY2a34dYn1eEe2YFzHKTFJPzOxyeKsDsFaafng==
-----END EC PRIVATE KEY-----
现在,当我使用AES256通过使用以下命令对其进行加密时

openssl ec-aes256-in key.pem-out encrypted-key.pem

我明白了


如何使用NodeJS的Crypto获得类似的加密密钥?或者换句话说,那是什么格式,是如何加密的。使用NodeJS的加密对aes-256-cbc加密来说是微不足道的,但我不确定如何处理密码短语(希望是pbkdf2)以及如何达到该格式。它在什么地方有记录吗?

很好。我检查了加密密钥的格式,但这只显示了结果密钥的信息(否则它只是带有PKCS#5填充的CBC)。我假设使用一轮
EVP_BytesToKey
作为密钥派生,但这是特定于OpenSSL的。简而言之,您看到的是使用RFC 1421的加密密钥。这不是PKCS#8。以下是Crypto++项目如何实现与OpenSSL的互操作性:。wiki文章的介绍与您和Node.js相关。@jww:您可能应该将其作为答案发布,因为这是一个非常好的线索。顺便说一句,到PEM包的实际链接应该是
-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,96218C0F2D6F661750C994B319DD05FB

pdk5WCaaLL8+YU27QjHMRgNkNwgPfgqL2ZNx/73pBDiSekfEKn39XrllE+j0lEA/
jNt1v85bBl4GQR97Br1wYl0WyHRTMlJvyc1f+dRIG+Pyu2gt4bdWaXbuajn0suWG
EGNPKBQJNvY3+J010FQfVI45puC03gKA910ODSE3igNuAtSxoptmbD9DMr/2hj2y
BG1WarSvtX9P/eFw6sLVtou8iAD53lO41SA/ppHAbwuGdFwH9bA/LKlQUEHC3v2J
QJmEdt/1wYO4QLtFulDpNVd7nqGd3yn2/sZ1E5XBJ4E=
-----END EC PRIVATE KEY-----