def generate_ec_key_pair(): curve = ec.SECP256R1() # generate ec key pair private_key = ec.generate_private_key(curve) public_key = private_key.public_key()
# get the private key bytes
private_key_bytes = private_key.private_numbers().private_value.to_bytes(32, "big")
# convert the private key bytes to a hex string
private_key_hex = private_key_bytes.hex()
# get the X and Y coordinates of the public key as bytes
x_coordinate_bytes = public_key.public_numbers().x.to_bytes(32, "big")
y_coordinate_bytes = public_key.public_numbers().y.to_bytes(32, "big")
# concatenate the X and Y coordinates and convert them to a hex string
public_key_hex = "04" + x_coordinate_bytes.hex() + y_coordinate_bytes.hex()
return private_key_hex, public_key_hex 转成nodejs
To convert the given Python code for generating an EC key pair to Node.js, you can use the crypto
module available in Node.js. Below is the equivalent code in Node.js:
const crypto = require('crypto');
// Generate EC key pair
const { privateKey, publicKey } = crypto.generateKeyPairSync('ec', {
namedCurve: 'prime256v1', // Equivalent to SECP256R1
publicKeyEncoding: {
type: 'spki',
format: 'der'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'der'
}
});
// Get the private key bytes
const privateKeyBytes = privateKey.slice(privateKey.length - 32);
const privateKeyHex = privateKeyBytes.toString('hex');
// Get the public key bytes
const publicKeyBytes = publicKey.slice(publicKey.length - 65);
const xCoordinateBytes = publicKeyBytes.slice(1, 33);
const yCoordinateBytes = publicKeyBytes.slice(33, 65);
// Concatenate the X and Y coordinates and convert them to a hex string
const publicKeyHex = '04' + xCoordinateBytes.toString('hex') + yCoordinateBytes.toString('hex');
console.log('Private Key (Hex):', privateKeyHex);
console.log('Public Key (Hex):', publicKeyHex);
crypto.generateKeyPairSync
function is used to generate the EC key pair with the named curve prime256v1
, which is equivalent to SECP256R1
.This code will generate the EC key pair and print the private and public keys in hexadecimal format, similar to the Python code provided.