Node.js 椭圆曲线加密库------eccrypto

eccrypto-js:椭圆曲线密码库(NodeJS,浏览器和Pure JS) eccrypto-js 椭圆曲线密码库(NodeJS,浏览器和Pure JS) 描述 该库是的端口,它利用和Browser环境中的本机库以及纯JavaScript后备功能。 用法 随机字节 import * as eccryptoJS from 'eccrypto-js' ; const length = 32 ; const key = eccryptoJS . randomBytes ( length ) ; // key.length === length AES import * as eccryptoJS from 'eccrypto-js' ; const key = eccryptoJS . randomBytes ( 32 ) ; const iv = eccryptoJS . randomBytes ( 16 ) ; const str = 'test messa 立即下载

eccrypto为用于浏览器和Node的椭圆曲线加密库。

 

动机

没有任何同构的ECC库为Node.js和浏览器提供ECDSA、ECDH和ECIES,并且使用最快的实现(例如secp256k1-node比其他库快得多,但只能在Node.js上使用)。所以eccrypto是一种创造的尝试。

 

实现细节

在Browserify的帮助下,eccrypto使用相同的API为浏览器和Node.js提供了不同的实现。因为WebCryptoAPI定义了异步promise-drive的API,所以Node的实现也需要使用promises 。

在可能的情况下,使用Node.js加密模块/库绑定,在可能的情况下使用WebCryptoAPI,只有secp256k1曲线,只有sha-512(Kdf),hmac-sha-256(Hmac)和aes-256-cbc,用于ECIES压缩密钥支持。

本地加密API限制

crypto

ECDH仅在Node 0.11+中运行(请参阅https://github.com/joyent/node/pull/5854),ECDSA仅支持PEM格式的密钥(请参见https://github.com/joyent/node/issues/6904 ),根本不支持ECIES。

WebCryptoAPI

Chrome只在Windows上支持ECDSA和ECDH(参见bug 338883),Firefox不支持ECDSA和ECDH(仅在36.0+中修复,请参见bug 1034854;请参见功能矩阵),而且WebCryptoAPI草案中根本没有定义ECIES。另外,WebCryptoAPI目前只定义了NIST推荐的曲线,这意味着不支持Secp256k1(K-256)曲线(另请参阅:[1],[2])。因此,我们在Node中使用seck256k1库进行ECDSA,在浏览器中使用椭圆库实现ECDSA和ECDH,并借助本机密码API手动实现ECIES。

 

可能的未来目标

支持其他曲线/kdf/mac/对称加密方案

 

用法

ECDSA

//适用于数字货币账户体系
var crypto = require("crypto");   //官方库
var eccrypto = require("eccrypto"); //椭圆曲线加密库
 
//一个新的随机的32字节私钥。
var privateKey = eccrypto.generatePrivate();
//私钥对应的未压缩(65字节)公钥。
var publicKey = eccrypto.getPublic(privateKey);
//字符串
var str = "message to sign";
//使用sha256哈希字符串
var msg = crypto.createHash("sha256").update(str).digest();
//使用私钥签名哈希数据
eccrypto.sign(privateKey, msg).then(function(sig) {
  console.log("Signature in DER format:", sig);
  //使用公钥验证签名数据和哈希数据是否匹配
  eccrypto.verify(publicKey, msg, sig).then(function() {
    console.log("Signature is OK");
  }).catch(function() {
    console.log("Signature is BAD");
  });
});

ECDH

//适用于点对点通信加密
var eccrypto = require("eccrypto");
//获得两对公私玥 
var privateKeyA = eccrypto.generatePrivate();
var publicKeyA = eccrypto.getPublic(privateKeyA);
var privateKeyB = eccrypto.generatePrivate();
var publicKeyB = eccrypto.getPublic(privateKeyB);
//使用A私钥和B公钥生成双方通信的加密私钥
eccrypto.derive(privateKeyA, publicKeyB).then(function(sharedKey1) {
 //使用B的私钥和A的公钥生成双方通信的加密私钥
  eccrypto.derive(privateKeyB, publicKeyA).then(function(sharedKey2) {
    //ECDH算法该加密私钥应该相等
    console.log("Both shared keys are equal:", sharedKey1, sharedKey2);
  });
});

ECIES

//适用于对数据进行非对称加密
var eccrypto = require("eccrypto");
//生成两对公私钥
var privateKeyA = eccrypto.generatePrivate();
var publicKeyA = eccrypto.getPublic(privateKeyA);
var privateKeyB = eccrypto.generatePrivate();
var publicKeyB = eccrypto.getPublic(privateKeyB);
 
//使用B的公钥加密字符串字节
eccrypto.encrypt(publicKeyB, Buffer.from("msg to b")).then(function(encrypted) {
  //使用B的私钥解密字符串字节
  eccrypto.decrypt(privateKeyB, encrypted).then(function(plaintext) {
    console.log("Message to part B:", plaintext.toString());
  });
});
 
//使用A的公钥加密字符串字节
eccrypto.encrypt(publicKeyA, Buffer.from("msg to a")).then(function(encrypted) {
  //使用A的私钥解密字符串字节
  eccrypto.decrypt(privateKeyA, encrypted).then(function(plaintext) {
    console.log("Message to part A:", plaintext.toString());
  });
});

 

elliptic, 在普通的javascript中,快速椭圆曲线加密.zip elliptic, 在普通的javascript中,快速椭圆曲线加密 椭圆 椭圆曲线实现中的快速椭圆曲线密码。注意:在选择密码操作曲线之前,请先查看 http://safecurves.cr.yp.to/ 。激励ECC比常规的RSA加密慢得多,JS实现更慢。基准测试$ nod 立即下载

相关推荐

elliptic:普通javascript中的快速椭圆曲线密码学

椭圆形 在简单的javascript实现中进行快速椭圆曲线加密。 注意:在为加密操作选择曲线之前,请先查看 。 激励 ECC比常规的RSA加密要慢得多,而JS的实现则要慢得多。 基准测试 $ node benchmarks/index.js Benchmarking: sign elliptic#sign x 262 ops/sec ±0.51% (177 runs sampled) eccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled) ------------------------ Fastest is elliptic#sign ======================== Benchmarking: verify elliptic#verify x 113 ops/sec ±0.50% (166 runs sampled)

【笔记】用Javascript实现椭圆曲线加密算法

之前为了一个项目所以去学了下椭圆曲线加密算法,本来是想写篇笔记细写算法的,但写了半天也没写出来什么,所以不如把自己摸索的东西用代码写出来了。之前项目用的nodejs,所以这里就用js写了。所有代码几乎全部可以直接在F12的控制台中运行。 0x01 点的定义 ecc中最基础计算单位自然就是一个个点了,点的定义非常简单,只要new一个对象然后赋予其点的xy坐标即可。 class Point{ constructor(x,y){ this.x = BigInt(x); th

qq_35859034的博客 2224

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

crypto++下载、安装(VS2017)及加解密使用

Crypto++(也称为Crypto++ Library或Crypto++ STL)是一个C++密码学库,它提供了各种密码学算法和安全编程工具,使开发人员能够实现数据的加密、解密、签名、验证和其他密码学操作。Crypto++是一个开源项目,具有广泛的应用领域,包括网络通信、数据存储、安全协议、数字签名、加密文件系统等。

強雲的博客 4410

从开源到落地:SimpleBGC 三轴稳像平台全栈技术解析(上)

SimpleBGC是一款开源的稳定云台控制系统,相比专业设备具有显著的价格优势(仅为1/5-1/10),采用模块化设计支持全场景适配。系统包含硬件设计、软件代码和算法三大核心:硬件采用STM32主控和IMU传感器,支持6步换向和FOC电机驱动;软件采用三层架构(驱动层、算法层、应用层),实现姿态解算和PID控制;算法方面提供互补滤波(基础版)和卡尔曼滤波(高端版),可达到±0.5°至±0.1°的稳定精度。该系统适用于无人机航拍、工业检测等多种应用场景,特别适合DIY开发者和中小企业进行定制化开发。

bother3000的博客 3683

二阶锥松弛在配电网最优潮流计算中的应用(IEEE33节点配电网最优潮流算例matlab程序)(yalmip+cplex)

文献[7]建立了以支路潮流计算为基础的OPF模型,针对OPF中的非凸性约束,采用SOCR技术将其松弛为二阶锥约束,整个 OPF 模型则被转化为二阶锥规划( Second Order Cone Programming,SOCP)问题,对其求解可以得到全局最优解。其次结合辐射型配电网潮流特点建立支路潮流约束,并考虑配电网中的可控单元,包括分布式电源和离散、连续无功补偿装置,建立其出力约束,该模型为非凸非线性模型;式中,αj,t和βij,t分别为t时段内节点i电压的二次方和支路ij电流的二次方。

weixin_47365903的博客 1万+

Crypto++ ECC加密

转自:https://www.jianshu.com/p/8177c322b695 最近工作有个项目需要用到加密算法,在网上搜索,Crypto++库是一个不错的加密算法库,然而在网上,用Crypto++库来做ECC加密算法的例子很少。而且网上的例子也大都是把公钥和私钥生成到文件中,而笔者需要的是把公钥和私钥直接放到字符串中。 经过自己的搜索和试验,终于找到了实现的方法,可能

infi 3626

Sipeed麦克风阵列板练习

麦克风阵列板 Maix Dock Sipeed

sunshinebigbig的博客 3832

ECCrypto 开源项目教程

ECCrypto 开源项目教程 1. 项目的目录结构及介绍 ECCrypto 项目的目录结构如下: eccrypto/ ├── docs/ ├── eccrypto/ │ ├── __init__.py │ ├── crypto.py │ ├── keys.py │ ├── utils.py │ └── ... ├── tests/ │ ├── __init__.py │ ...

gitblog_00558的博客 422

Unity新手必看:5分钟搞定TextMeshPro中文乱码,告别小方块(附7000+常用字库)

本文详细介绍了Unity中TextMeshPro中文乱码问题的解决方案,包括快速生成中文字体的步骤和优化技巧。通过使用支持中文的.ttf字体文件和自定义字符集,开发者可以在5分钟内解决TMP显示小方块的问题,提升游戏或应用的文本显示效果。

weixin_33095355的博客 362

Fluent基于低氧舱气体交换仿真(氮气与空气混合)

一、背景概述 模拟低氧舱充氮气和排除混合气体的过程,假设注入95%的氮气,舱内原有气体为空气,压力为标准大气压,温度为300K。观察气体注入过程中,舱内平均氮气和氧气浓度的变化。 二、Fluent设置 Setup 1、General type选择压力基 绝对速度 瞬态 重力勾选 2、Model 能量方程开启 组分运输开启,设置方法如下: 选择后OK,view就会变成Edit,点击Edit。然后再次点击Edit。 将组分中的非氮气氧气和空气的气体移除,右边选项需要将空气放在最后一位。 3、Materi

qq_35535616的博客 1万+

JavaScript ECCrypto 库 - 用于浏览器和Node.js的椭圆曲线加密

JavaScript ECCrypto 库 - 用于浏览器和Node.js的椭圆曲线加密 1. 项目基础介绍及编程语言 JavaScript ECCrypto 是一个开源的椭圆曲线加密库,旨在为浏览器和 Node.js 提供统一的 API。该项目的编程语言主要包括 JavaScript 和 C++,其中 JavaScript 用于实现浏览器端的功能,而 C++ 则用于 Node.js 的本地绑定。...

gitblog_00362的博客 412

046篇:数据统计:分组、求和、平均值、最大最小值

本文介绍了在RPA中实现数据分组统计的方法。通过字典+循环组合,可以完成按单字段或多字段的分组聚合操作,包括求和、计数、求平均值及最大/最小值等。文章详细讲解了分组统计的原理,并提供了单级分组、多级分组的具体实现步骤,最后通过销售数据按月分组的实战案例,演示了如何从原始数据到生成汇总报表的完整流程。这些方法可以灵活应用于各类数据统计分析场景。

weixin_59649563的博客 214

使用 crypto 模块进行加密和解密

使用 crypto 模块进行加密和解密。crypto 模块的主要功能有哈希算法(md5、sha1、sha256等)、对称加密(AES)以及非对称加密。

Eliaukoyx 6999

Debezium系列之:深入理解 Debezium Topic的设置要求

Debezium系列之:配置 Debezium Topic

zhengzaifeidelushang的博客 1009

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Nodejs和C#使用ECDH算法交换秘钥

nodejs的ECDH算法在进行computeSecret的时候不会自动进行HASH运算,但C#的ECDH算法必须指定HASH算法。

艾恩 897

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JavaScript 中使用 escape、encodeURI、encodeURIComponent 编码解码

JavaScript 中使用 escape、encodeURI、encodeURIComponent 编码解码

qq_25775675的博客 4413

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NodeJS加密算法

当发送方A向接收方B发送数据时,需要考虑的问题有:数据的安全性。数据的完整性,即数据不被篡改。数据的真实性,即数据确实来自于发送方,传输过程中没有被替换。数据的不可否认性,即验证发送方确实发送了数据。A 使用密钥加密数据A 将密文发送给 BB 收到密文后,使用相同的密钥对其进行解密,取得原始数据优点:速度快缺点:密钥被盗就被破解、密钥管理不方便(每个用户都要对应一个密钥)实现算法有:凯撒密码,AES(Advanced Encryption Standard)、DES(Data Encryption Stan

过客2019 4126

使用椭圆曲线进行加密解密

JDK中自带了椭圆曲线的签名,但是没有实现椭圆曲线的加密解密。不过bouncycastle库实现了,下面的代码需要bouncycastle库。 需要做的准备工作: 1. 去JDK的下载页面,下载 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 这个东西。

^_^ 1万+

node之crypto模块,Node环境加密

crypto 是 Node.js 内置的加密模块,提供了一组用于加密、解密、签名、验证和生成随机数的功能。它支持多种加密算法和哈希算法,可以用于保护数据的机密性和完整性。对称加密:crypto 模块提供了对称加密算法,如 AES、DES、3DES 等。使用相同的密钥进行加密和解密,适用于对称加密场景。非对称加密:crypto 模块支持非对称加密算法,如 RSA、DSA、ECC 等。非对称加密使用一对密钥,公钥用于加密数据,私钥用于解密数据或生成数字签名。

老衲爱洗头的博客 4200

【ECDH java后端和javaScript前后端互通实现】

Elliptic-curve Diffie-Hellman(ECDH)是一种通过两方达成密钥协商的密钥生成算法,每一方都有一个椭圆双曲线的公私钥对,双方在不安全的通信通道间传递信息达成密钥生成协议。在初始时刻,Alice和Bob共享了些域的参数(p a,b,G,n,h),Alice在整数范围[t,n-1]中随机选择一个私钥d,并通过计算(Q=d·G)web前端和后端之间的通信不一定可靠,如果不方便使用预共享密钥的方式完成身份的确认,那么可以使用ECDH密钥协商算法在前端和后端进行密钥间的协商。

csdn闻声即知人的博客 1780

浏览器内使用JS和椭圆曲线密钥交换

与之相比,通常使用的其他导出类型包括 "spki"(SubjectPublicKeyInfo)和 "pkcs8"(Private-Key Information Syntax Standard #8)。"spki" 用于导出公钥,"pkcs8" 用于导出私钥。:导出的是 Private-Key Information Syntax Standard #8 结构,包含了私钥的算法标识和私钥本身。备注:公钥可以导出,私钥不允许导出,所以只能生成秘钥之后,保存共享密钥,用指纹来标记;

robinfoxnan的专栏 483

JS逆向---国家加密系列(SM算法详解及其多个实例)

众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)那等等。SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。其中SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用;声明。

m0_52336378的博客 9207

椭圆曲线密码学相关概念与开源实现

引子   在阅读并尝试使用椭圆曲线加密相关代码时,很多时候需要对底层的概念有所了解,而不仅仅限于使用。例如前文 NODEJS中椭圆曲线签名和验证就仅仅限于加密货币领域和NODEJS。本文尝试对椭圆曲线密码学的相关概念做一个梳理,这样能够帮助读者以及我自己更好的去挑选和使用相关的开源代码。   概念与缩写   简表如下: 缩写 英文全名

予衡飞翔 3454

椭圆曲线加密算法

椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。   椭圆曲线在密码学中的使用,是1985年由Neal Koblitz和...

象牙塔下的渣渣 1万+
上一篇: 瞎写
下一篇: 以太坊2.0文档------以太坊2.0阶段(一)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值