静态方法:ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])
¥Static method: ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])
-
key
<string> | <ArrayBuffer> | <Buffer> | <TypedArray> | <DataView> -
curve
<string> -
format
<string> 默认值:'uncompressed'
¥
format
<string> Default:'uncompressed'
将 key
和 curve
指定的 EC Diffie-Hellman 公钥转换为 format
指定的格式。format
参数指定点编码,可以是 'compressed'
、'uncompressed'
或 'hybrid'
。提供的密钥使用指定的 inputEncoding
进行解释,返回的密钥使用指定的 outputEncoding
进行编码。
¥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
.
使用 crypto.getCurves()
获取可用曲线名称的列表。在最近的 OpenSSL 版本中,openssl ecparam -list_curves
还将显示每个可用椭圆曲线的名称和描述。
¥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.
如果未指定 format
,该点将以 'uncompressed'
格式返回。
¥If format
is not specified the point will be returned in 'uncompressed'
format.
如果未提供 inputEncoding
,则 key
应为 Buffer
、TypedArray
或 DataView
。
¥If the inputEncoding
is not provided, key
is expected to be a Buffer
,
TypedArray
, or DataView
.
示例(解压缩密钥):
¥Example (uncompressing a key):
const {
createECDH,
ECDH,
} = await import('node: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'));
const {
createECDH,
ECDH,
} = require('node: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'));