javascript - 如何使用 JavaScript 库使用椭圆曲线破译加密消息?
问题描述
我在 JavaScript中找到了一个关于椭圆曲线密码学的库。我已经学会了如何加密消息。但是,我没有找到如何将其解密为原始消息。
加密代码:
var EC = require('elliptic').ec;
var ec = new EC('secp256k1');
var msg = "hello";
let myKey = ec.keyFromPrivate('29f3c33a550d3810e6b82b7b510672118aeabcf8b19e00172e4623cbf480d2b8');
const sig = myKey.sign(msg, 'base64');
var derSign = sig.toDER('hex');
console.log (derSign)
输出:
3044022076e7fbf80454f764e346dd359eb7f2002802e68d30a689d77d6211aa2c6e9d7302201b5f35d92b8f4aefd5f69d9d21e3dfba75404e4d5a89e09239b2accf43ff6d63
我想再次返回签名hello
。请问我怎么能这样?
解决方案
我在elliptic中看不到任何加密和解密功能,即使在库的源代码中也是如此。在您的演示代码中,它是一个签名,而不是加密消息。你可以verify
用来验证消息是否被一些邪恶的人改变了..
console.log(myKey.verify(msg, derSign)); // true
console.log(myKey.verify(msg+"something_else", derSign)); // false
当输出为 false 时,表示您的消息已更改,而 true 表示消息未更改。这就是签名的工作方式,而不是加密或解密消息。
所以,如果你想用 ecc 加密和解密消息,我猜你可能会使用这个库eccrypto。
推荐阅读
- docker - 将 /var/run/docker.sock 挂载到容器中时,使用哪个文件系统进行卷挂载?
- sql - Is this INSERT INTO SSMS query safe from SQL injection?
- javascript - Error trying to save to local storage with Vue.JS
- python - 如何使用 cx_Freeze 将一些 .py 文件“隐藏”到 .exe 中?
- reactjs - 我如何默认 Atom 打开带有特定语言语法突出显示的特定文件扩展名?
- machine-learning - 粒子群优化 pbest 和 gbest
- node.js - 当 1 使 http GET 时使两个函数调用同步运行
- ios - 计算 UITextView 中的文本是否小于 4 maximumNumberOfLines 限制?
- vb.net - 是否可以在 VB.NET 中的通用接口集合上实现扩展方法?
- java - 如何使用 Spring Boot 将表单数据绑定到模型中?