问题描述
我正在使用以下代码加密数据在 JS 中使用 ECC。我不知道如何解密这个加密的数据。谁能帮帮我?
安装
npm install elliptic-curve
导入 secp256k1 模块:
var secp256k1 = require('elliptic-curve').secp256k1
私钥到公钥的转换:
var privateKey = '278a5de700e29faae8e40e366ec5012b5ec63d36ec77e8a2417154cc1d25383f'
secp256k1.getPublicKey(privateKey)
'03fdd57adec3d438ea237fe46b33ee1e016eda6b585c3e27ea66686c2ea5358479'
消息签名:
var message = "Hello,world!"
secp256k1.signMessage(message,privateKey)
'3046022100997b6210d959e67ad9cee01589d01daf0fe77ce0f002d040d769171c33504860022100e'
解决方法
如果您查看其源代码,则包椭圆曲线在这里被破坏,这只是椭圆的包装器,基于椭圆的直接实现没有对私钥大小和公钥格式(十六进制)进行消毒:
var EC = require('elliptic').ec
var curve = new EC('secp256k1')
var privateKey = '278a5de700e29faae8e40e366ec5012b5ec63d36ec77e8a2417154cc1d25383f'
var publicKey = curve.keyFromPrivate(privateKey).getPublic(true,"hex")
var message = "Hello,world!"
var signed = curve.sign(message,privateKey)
var publicKeyObject = curve.keyFromPublic(publicKey,"hex")
var check = publicKeyObject.verify(message,signed)
console.log(check)
检查在 this 运行