假设要签名的消息是一个字符串:“Hello World!”。DSA签名的第一个步骤是对待签名的消息生成一个消息摘要。不同的签名算法使用不同的消息摘要算法。比如,DSS使用SHA1来生成160比特的摘要,而ECDSA256使用SHA256生成256比特的摘要。
摘要生成结束后,应用签名算法对摘要进行签名:
首先查看一下
OpenSSL
内建了哪些椭圆曲线,使用命令为:
openssl
ecparam -list_curves
选择一条椭圆曲线创建 ECC 公私钥对,这里使用 secp256k1,执行命令:
openssl
ecparam -name secp256k1 -genkey -out ec.key
可以用文本编辑器打开 ec.key 文件,其内容类似于:
—–BEGIN EC PARAMETERS—–
BgUrgQQACg==
—–END EC PARAMETERS—–
—–BEGIN EC PRIVATE KEY—–
MHQCAQEEINMie6Xet
1. 前言
最近整理了整理,把之前好玩的东西翻一下,这期就到了http了。
如何快速写一个http服务器?方法当然五花八门了,python、go几行就能实现出来了,那么c\c++如何实现呢?
2. 相关接口
libevent内置了http相关的处理方法(之前早期版本会有一些不稳定,现在event2比较靠谱了),同时支持
openssl
3 默认废弃了 旧版本 (opessl 1.x) 的部分api 导致部分旧ecc 代码无法使用(可以通过配置编译选项打开)新接口是真的方便,基本上你都不需要懂啥密码学知识,对我们这种密码白痴来说太好了。,这里展示如何使用新接口用ECC 进行加密解密。
http://gmssl.org/docs/sm2.html
曲线sm2p256v1基于ANSI
X9
.
62
elliptic curve
prime256v1
(aka secp256r1, NIST P-256)
椭圆曲线
NID
一、椭圆曲线密码算法
椭圆曲线:是一类二元多项式方程,它的解构成一个椭圆曲线。
椭圆曲线参数:定义一条唯一的椭圆曲线。介绍其中两个参数G(基点)和n(阶)。G点(xG, yG)是椭圆曲线上的基点, 有限域椭圆曲线上所有其他的点都可以通过G点的倍乘运算
计算
得到,即P=[d]G, d也是属于有限域,d的最大值为素数n。
有限域上的椭圆曲线:椭圆曲线上的解不是连续的,而是离散的,解的值满足有限域的限制。有限域有两种,Fp和F2m。
E(Fq):Fq上椭圆曲线E 的所有有理点(包括无穷远点O)组成的集合。
将库文件解压到本地文件后进行配置:
a、config配置:
进入解压后的目录,执行 ./config shared --prefix=/usr/local/
openssl
--
openssl
dir=/usr/local/
shared 为生成动态连...
在前面的文章《写给开发人员的实用密码学 - 对称加密算法》中,介绍了现代密码学中非常重要的加密解密算法。从工程学的角度,选取密钥足够长的加密算法(比如AES 256、AES 512),是无...
一. 椭圆曲线加密算法
简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密(有待考证)
二. 什么是椭圆曲线
Wolfram MathWorld给出了个准确非凡的定义椭圆曲线。椭圆曲线可以暂时简单的理解为描述了特定点的集合的公式:
openssl
ec -in
prime256v1
-key.pem -out
prime256v1
-key.der -outform der
将私钥转换成data格式(包含因子和pem内容):
openssl
ec -in prime256v