ecc算法源码
A. 什么是RSA和ECC算法
RSA(Rivest-Shamir-Adleman)加密算法:它是第 一个既能用于数据加密也能用于数字签名的算法。比较易于理解和操作,是高强度非对称加密系统,密钥长度少则512位,多则2048位,非常难破解,安全系数是非常高的。ECC(Elliptic Curve Cryptosystems )加密算法:椭圆曲线密码体制,它同样也是在数据位上额外的位存储一个用数据加密的代码。椭圆曲线其实可能比RSA更复杂。国内的老品牌CA机构-天威诚信,旗下的vTrus SSL证书,该证书支持 SHA256 with RSA 2048 算法/ECC 256 算法。
B. ECC是什么
ECC(“代码纠错[或纠正]”或者“错误检验和纠正”)允许被读取和传送的数据进行错误检验,并当需要时,进行不工作纠正。这不同于奇偶检验,因为错误被不仅发现而且得到了改正。当数据传输速度(因此出错率)增加的情况下,ECC是逐步被设计进行数据存储和输送硬件的。 以下是其如何进行数据存储工作的: 当一单位数据(或“单词”)被储存在RAM或者外部存储器里时,描述单词中位次序的代码被计算并且跟数据的单位一起储存。对每句64位的话来说,额外的7位需要储存这条代码。什么时候数据的单位需要读取,储存和将要读取的词语的一条代码使用原先的算法再次被计算。当词语被储存时,将新近合成码与产生的代码相比较。如果代码符合,则说明数据没有错误并且得到传送。 如果代码不匹配,丢失或者错误的比特将被通过代码比较确定,比特或者几个比特将被需要提供或者改正。 不尝试改正依然在内存中的数据。最终,它将被新数据覆盖,并认为错误是短暂的,错误的比特将会“离开”。 在系统已经关闭之后仓库里相同地方重复出现的任何错误,再次表明了任何永久的硬件错误和消息存入日志或者给系统管理员,表明经常出现错误的位置。 在64位的单词水平上,奇偶检验和ECC需要相同数目的额外比特。通常,ECC增加任何计算的可靠性或者电信系统(或者一个系统的部分)而没有增加更多的花费。里德-索洛蒙代码通常被实现了;其可以发现并且恢复“擦掉”的比特以及错误的比特。
C. 用ECC椭圆曲线加密汉字,密文是问号啊和不熟悉的汉字等组成。我希望加密后的汉字直接是01代码,怎么实现
保密年限到2030年,现在要采用224位以上的ECC。因为ECC加密过程是对点进行操作的,程序中是对二进制数进行运算,所以一定是将待加密的明文转化为01代码,然后01代码通过ECC算法转化为其他的排序的01代码,最后将01代码转化为乱码的汉字。关于c++程序的问题,如果是你自己写的,修改到把数据加密完就停止即可。
D. 求一个基于openssl写的ecc曲线的源代码
下面的例子生成两对ECC密钥,并用它做签名和验签,并生成共享密钥。
#include <string.h>
#include <stdio.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/objects.h>
#include <openssl/err.h>
int main()
{
EC_KEY *key1,*key2;
EC_POINT *pubkey1,*pubkey2;
EC_GROUP *group1,*group2;
int ret,nid,size,i,sig_len;
unsigned char*signature,digest[20];
BIO *berr;
EC_builtin_curve *curves;
int crv_len;
char shareKey1[128],shareKey2[128];
int len1,len2;
/* 构造EC_KEY数据结构 */
key1=EC_KEY_new();
if(key1==NULL)
{
printf("EC_KEY_new err!\n");
return -1;
}
key2=EC_KEY_new();
if(key2==NULL)
{
printf("EC_KEY_new err!\n");
return -1;
}
/* 获取实现的椭圆曲线个数 */
crv_len = EC_get_builtin_curves(NULL, 0);
curves = (EC_builtin_curve *)malloc(sizeof(EC_builtin_curve) * crv_len);
/* 获取椭圆曲线列表 */
EC_get_builtin_curves(curves, crv_len);
/*
nid=curves[0].nid;会有错误,原因是密钥太短
*/
/* 选取一种椭圆曲线 */
nid=curves[25].nid;
/* 根据选择的椭圆曲线生成密钥参数group */
group1=EC_GROUP_new_by_curve_name(nid);
if(group1==NULL)
{
printf("EC_GROUP_new_by_curve_name err!\n");
return -1;
}
group2=EC_GROUP_new_by_curve_name(nid);
if(group1==NULL)
{
printf("EC_GROUP_new_by_curve_name err!\n");
return -1;
}
/* 设置密钥参数 */
ret=EC_KEY_set_group(key1,group1);
if(ret!=1)
{
printf("EC_KEY_set_group err.\n");
return -1;
}
ret=EC_KEY_set_group(key2,group2);
if(ret!=1)
{
printf("EC_KEY_set_group err.\n");
return -1;
}
/* 生成密钥 */
ret=EC_KEY_generate_key(key1);
if(ret!=1)
{
printf("EC_KEY_generate_key err.\n");
return -1;
}
ret=EC_KEY_generate_key(key2);
if(ret!=1)
{
printf("EC_KEY_generate_key err.\n");
return -1;
}
/* 检查密钥 */
ret=EC_KEY_check_key(key1);
if(ret!=1)
{
printf("check key err.\n");
return -1;
}
/* 获取密钥大小 */
size=ECDSA_size(key1);
printf("size %d \n",size);
for(i=0;i<20;i++)
memset(&digest[i],i+1,1);
signature=malloc(size);
ERR_load_crypto_strings();
berr=BIO_new(BIO_s_file());
BIO_set_fp(berr,stdout,BIO_NOCLOSE);
/* 签名数据,本例未做摘要,可将digest中的数据看作是sha1摘要结果 */
ret=ECDSA_sign(0,digest,20,signature,&sig_len,key1);
if(ret!=1)
{
ERR_print_errors(berr);
printf("sign err!\n");
return -1;
}
/* 验证签名 */
ret=ECDSA_verify(0,digest,20,signature,sig_len,key1);
if(ret!=1)
{
ERR_print_errors(berr);
printf("ECDSA_verify err!\n");
return -1;
}
/* 获取对方公钥,不能直接引用 */
pubkey2 = EC_KEY_get0_public_key(key2);
/* 生成一方的共享密钥 */
len1=ECDH_compute_key(shareKey1, 128, pubkey2, key1, NULL);
pubkey1 = EC_KEY_get0_public_key(key1);
/* 生成另一方共享密钥 */
len2=ECDH_compute_key(shareKey2, 128, pubkey1, key2, NULL);
if(len1!=len2)
{
printf("err\n");
}
else
{
ret=memcmp(shareKey1,shareKey2,len1);
if(ret==0)
printf("生成共享密钥成功\n");
else
printf("生成共享密钥失败\n");
}
printf("test ok!\n");
BIO_free(berr);
EC_KEY_free(key1);
EC_KEY_free(key2);
free(signature);
free(curves);
return 0;
}
E. 什么是ECC加密算法
ECC(Elliptic Curve Cryptosystems )椭圆曲线密码体制,美国SUN公司开发的,它的体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制,如果你能理解RSA算法,也算是对ECC有大概的了解,建议你去买些相关书籍看看。
F. 有ECC算法的软件吗
原来是椭圆曲线加密的算法呗?肯定有很多源码可以找到的呀。比如这里有一个java的实现 http://blog.csdn.net/feiying_soft/article/details/6454828需要原理的话有这里 http://blog.csdn.net/jiadelin/article/details/4595171
G. 求AES、ECC、SHA1算法,用C/C++实现代码,急!!!一定要能运行的!务必在今天内回答!在线等
C可以不 C++懂皮毛
H. 什么是ECC
ECC
ECC是“Error Checking and Correcting”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。
要了解ECC技术,就不能不提到Parity(奇偶校验)。在ECC技术出现之前,内存中应用最多的是另外一种技术,就是Parity(奇偶校验)。我们知道,在数字电路中,最小的数据单位就是叫“比特(bit)”,也叫数据“位”,“比特”也是内存中的最小单位,它是通过“1”和“0”来表示数据高、低电平信号的。在数字电路中8个连续的比特是一个字节(byte),在内存中不带“奇偶校验”的内存中的每个字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测。比如一个字节中存储了某一数值(1、0、1、0、1、0、1、1),把这每一位相加起来(1+0+1+0+1+0+1+1=5)。若其结果是奇数,对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当CPU返回读取存储的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当CPU发现二者不同时就作出视图纠正这些错误,但Parity有个缺点,当内存查到某个数据位有错误时,却并不一定能确定在哪一个位,也就不一定能修正错误,所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并能纠正部分简单的错误。
通过上面的分析我们知道Parity内存是通过在原来数据位的基础上增加一个数据位来检查当前8位数据的正确性,但随着数据位的增加Parity用来检验的数据位也成倍增加,就是说当数据位为16位时它需要增加2位用于检查,当数据位为32位时则需增加4位,依此类推。特别是当数据量非常大时,数据出错的几率也就越大,对于只能纠正简单错误的奇偶检验的方法就显得力不从心了,正是基于这样一种情况,一种新的内存技术应允而生了,这就是ECC(错误检查和纠正),这种技术也是在原来的数据位上外加校验位来实现的。不同的是两者增加的方法不一样,这也就导致了两者的主要功能不太一样。它与Parity不同的是如果数据位是8位,则需要增加5位来进行ECC错误检查和纠正,数据位每增加一倍,ECC只增加一位检验位,也就是说当数据位为16位时ECC位为6位,32位时ECC位为7位,数据位为64位时ECC位为8位,依此类推,数据位每增加一倍,ECC位只增加一位。总之,在内存中ECC能够容许错误,并可以将错误更正,使系统得以持续正常的操作,不致因错误而中断,且ECC具有自动更正的能力,可以将Parity无法检查出来的错误位查出并将错误修正。
2 ECC(Elliptic Curve Cryptosystems )椭圆曲线密码体制
2002年,美国SUN公司将其开发的椭圆加密技术赠送给开放源代码工程
公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。
椭圆曲线密码体制来源于对椭圆曲线的研究,所谓椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程:
y2+a1xy+a3y=x3+a2x2+a4x+a6 (1)
所确定的平面曲线。其中系数ai(I=1,2,…,6)定义在某个域上,可以是有理数域、实数域、复数域,还可以是有限域GF(pr),椭圆曲线密码体制中用到的椭圆曲线都是定义在有限域上的。
椭圆曲线上所有的点外加一个叫做无穷远点的特殊点构成的集合连同一个定义的加法运算构成一个Abel群。在等式
mP=P+P+…+P=Q (2)
中,已知m和点P求点Q比较容易,反之已知点Q和点P求m却是相当困难的,这个问题称为椭圆曲线上点群的离散对数问题。椭圆曲线密码体制正是利用这个困难问题设计而来。椭圆曲线应用到密码学上最早是由Neal Koblitz 和Victor Miller在1985年分别独立提出的。
椭圆曲线密码体制是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。解椭圆曲线上的离散对数问题的最好算法是Pollard rho方法,其时间复杂度为,是完全指数阶的。其中n为等式(2)中m的二进制表示的位数。当n=234, 约为2117,需要1.6x1023 MIPS 年的时间。而我们熟知的RSA所利用的是大整数分解的困难问题,目前对于一般情况下的因数分解的最好算法的时间复杂度是子指数阶的,当n=2048时,需要2x1020MIPS年的时间。也就是说当RSA的密钥使用2048位时,ECC的密钥使用234位所获得的安全强度还高出许多。它们之间的密钥长度却相差达9倍,当ECC的密钥更大时它们之间差距将更大。更ECC密钥短的优点是非常明显的,随加密强度的提高,密钥长度变化不大。
德国、日本、法国、美国、加拿大等国的很多密码学研究小组及一些公司实现了椭圆曲线密码体制,我国也有一些密码学者做了这方面的工作。许多标准化组织已经或正在制定关于椭圆曲线的标准,同时也有许多的厂商已经或正在开发基于椭圆曲线的产品。对于椭圆曲线密码的研究也是方兴未艾,从ASIACRYPTO’98上专门开辟了ECC的栏目可见一斑。
在椭圆曲线密码体制的标准化方面,IEEE、ANSI、ISO、IETF、ATM等都作了大量的工作,它们所开发的椭圆曲线标准的文档有:IEEE P1363 P1363a、ANSI X9.62 X9.63、 ISO/IEC14888等。
2003年5月12日中国颁布的无线局域网国家标准 GB15629.11 中,包含了全新的WAPI(WLAN Authentication and Privacy Infrastructure)安全机制,能为用户的WLAN系统提供全面的安全保护。这种安全机制由 WAI和WPI两部分组成,分别实现对用户身份的鉴别和对传输的数据加密。WAI采用公开密钥密码体制,利用证书来对WLAN系统中的用户和AP进行认证。证书里面包含有证书颁发者(ASU)的公钥和签名以及证书持有者的公钥和签名,这里的签名采用的就是椭圆曲线ECC算法。
加拿大Certicom公司是国际上最着名的ECC密码技术公司,已授权300多家企业使用ECC密码技术,包括Cisco 系统有限公司、摩托罗拉、Palm等企业。Microsoft将Certicom公司的VPN嵌入微软视窗移动2003系统中。
I. 急!!!!!!!!!ECC加密算法源码,不用太多的,简单的将加密解密的代码贴出来就可以了~
想要加密最好用动态,别密码网络验证,,软件分离法
J. 如何生成ECC算法CSR文件
1.生成ECC算法私钥文件 openssl ecparam -genkey -name prime256v1 -out domain.key
2.生成ECC证书申请CSR文件 openssl req -new -sha265 -key domain.key -out domain_csr.txt
注意事项: ECC算法加密强度有3个选项:prime256v1 /secp384r1/secp521r1,prime256v1 目前已经足够安全,如无特殊需要请保持ECC算法prime256v1 默认即可。 SHA256目前已经足够安全,如无特殊需要请保持默认。