JS 中的椭圆曲线密码学 (ECC)

时间:2021-02-03 04:58:07

标签: reactjs encryption cryptography public-key-encryption encryption-asymmetric

我正在使用以下代码加密数据在 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'

1 个答案:

答案 0 :(得分:0)

如果您查看其源代码,则包椭圆曲线在这里被破坏,这只是椭圆的包装器,基于椭圆的直接实现没有对私钥大小和公钥格式(十六进制)进行消毒:

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 运行