ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])
key
<string> | <Buffer> | <TypedArray> | <DataView>curve
<string>inputEncoding
<string>key
字符串的编码。outputEncoding
<string> 返回值的编码。format
<string> 默认值:'uncompressed'
- 返回: <Buffer> | <string>
将 key
和 curve
指定的 EC Diffie-Hellman 公钥转换为 format
指定的格式。
format
参数指定点编码,可以是 'compressed'
、'uncompressed'
或 'hybrid'
。
提供的密钥使用指定的 inputEncoding
进行解释,返回的密钥使用指定的 outputEncoding
进行编码。
使用 crypto.getCurves()
获取可用曲线名称的列表。
在最近的 OpenSSL 版本中,openssl ecparam -list_curves
还将显示每个可用椭圆曲线的名称和描述。
如果未指定 format
,该点将以 'uncompressed'
格式返回。
如果未提供 inputEncoding
,则 key
应为 Buffer
、TypedArray
或 DataView
。
示例(解压缩密钥):
const { createECDH, ECDH } = require('crypto');
const ecdh = createECDH('secp256k1');
ecdh.generateKeys();
const compressedKey = ecdh.getPublicKey('hex', 'compressed');
const uncompressedKey = ECDH.convertKey(compressedKey,
'secp256k1',
'hex',
'hex',
'uncompressed');
// 转换后的密钥和未压缩的公钥应该是一样的
console.log(uncompressedKey === ecdh.getPublicKey('hex'));
key
<string> | <Buffer> | <TypedArray> | <DataView>curve
<string>inputEncoding
<string> The encoding of thekey
string.outputEncoding
<string> The encoding of the return value.format
<string> Default:'uncompressed'
- Returns: <Buffer> | <string>
Converts the EC Diffie-Hellman public key specified by key
and curve
to the
format specified by format
. The format
argument specifies point encoding
and can be 'compressed'
, 'uncompressed'
or 'hybrid'
. The supplied key is
interpreted using the specified inputEncoding
, and the returned key is encoded
using the specified outputEncoding
.
Use crypto.getCurves()
to obtain a list of available curve names.
On recent OpenSSL releases, openssl ecparam -list_curves
will also display
the name and description of each available elliptic curve.
If format
is not specified the point will be returned in 'uncompressed'
format.
If the inputEncoding
is not provided, key
is expected to be a Buffer
,
TypedArray
, or DataView
.
Example (uncompressing a key):
const { createECDH, ECDH } = require('crypto');
const ecdh = createECDH('secp256k1');
ecdh.generateKeys();
const compressedKey = ecdh.getPublicKey('hex', 'compressed');
const uncompressedKey = ECDH.convertKey(compressedKey,
'secp256k1',
'hex',
'hex',
'uncompressed');
// The converted key and the uncompressed public key should be the same
console.log(uncompressedKey === ecdh.getPublicKey('hex'));