BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #35618同步于 2013/1/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

有没有了解sm2加密算法的

bitowen
2013/1/5镜像同步17 回复
最好有代码之类的,谢谢。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
youngbug机器人#1 · 2013/1/11
开源了吧?
bitowen机器人#2 · 2013/1/11
网上的代码都是基于openssl或者gmp大数运算库的,我想找找有没有不基于任何第三方库的代码 【 在 youngbug 的大作中提到: 】 : 开源了吧?
peggy89321机器人#3 · 2013/9/2
说 同样在研究SM2, 请问楼主现在找到了吗?
bitowen机器人#4 · 2013/9/2
哦 自己写了个 但秘钥是一个整型的长度,要支持256和1024位秘钥的话还得再自己写大数类的运算 【 在 peggy89321 的大作中提到: 】 : 说 同样在研究SM2, 请问楼主现在找到了吗?
liaolvkd机器人#5 · 2013/9/2
【 在 bitowen 的大作中提到: 】 : 哦 自己写了个 但秘钥是一个整型的长度,要支持256和1024位秘钥的话还得再自己写大数类的运算 SM2官方的说明文档差不多明白是什么意思,但是实现起来一头雾水,网上使用openssl库的更是看不懂,纠结···楼主能提供一下自己实现的代码么,可以的话 我的邮箱是513701434@qq.com。学习了!
bitowen机器人#6 · 2013/9/2
是给公司写的,不方便给代码,而且秘钥位数太低了。 【 在 liaolvkd 的大作中提到: 】 : SM2官方的说明文档差不多明白是什么意思,但是实现起来一头雾水,网上使用openssl库的更是看不懂,纠结···楼主能提供一下自己实现的代码么,可以的话 我的邮箱是513701434@qq.com。学习了!
iam19891211机器人#7 · 2013/9/2
openssl不是开源的么,从里面摘代码不知道是不是现实
Xsetc机器人#8 · 2013/9/2
哎.. 我贴下代码吧 给大家做参考..
Xsetc机器人#9 · 2013/9/2
kdf.h #include <memory.h> #include <openssl/evp.h> // ----- KDF FUNCTIONS START ----- //typedef void *(*KDF)(const void *in, size_t inlen, void *out, size_t *outlen); int x9_63_kdf(const EVP_MD *md, const unsigned char *share, size_t sharelen, size_t keylen, unsigned char *outkey) { int ret = 0; EVP_MD_CTX ctx; unsigned char counter[4] = {0, 0, 0, 1}; unsigned char dgst[EVP_MAX_MD_SIZE]; unsigned int dgstlen; int rlen = (int)keylen; unsigned char * pp; pp = outkey; if (keylen > (size_t)EVP_MD_size(md)*255) { fprintf(stderr, "%s(%d):", __FILE__, __LINE__); goto end; } while (rlen > 0) { EVP_MD_CTX_init(&ctx); if (!EVP_DigestInit(&ctx, md)) { fprintf(stderr, "%s(%d):", __FILE__, __LINE__); goto end; } if (!EVP_DigestUpdate(&ctx, share, sharelen)) { fprintf(stderr, "%s(%d):", __FILE__, __LINE__); goto end; } if (!EVP_DigestUpdate(&ctx, counter, 4)) { fprintf(stderr, "%s(%d):", __FILE__, __LINE__); goto end; } if (!EVP_DigestFinal(&ctx, dgst, &dgstlen)) { fprintf(stderr, "%s(%d):", __FILE__, __LINE__); goto end; } EVP_MD_CTX_cleanup(&ctx); memcpy(pp, dgst, keylen>=dgstlen ? dgstlen:keylen); rlen -= dgstlen; pp += dgstlen; counter[3]++; } ret = 1; end: return ret; } // ----- KDF FUNCTIONS END -----