返回信息流最好有代码之类的,谢谢。
这是一条镜像帖。来源:北邮人论坛 / security / #35618同步于 2013/1/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
有没有了解sm2加密算法的
bitowen
2013/1/5镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
网上的代码都是基于openssl或者gmp大数运算库的,我想找找有没有不基于任何第三方库的代码
【 在 youngbug 的大作中提到: 】
: 开源了吧?
哦 自己写了个 但秘钥是一个整型的长度,要支持256和1024位秘钥的话还得再自己写大数类的运算
【 在 peggy89321 的大作中提到: 】
: 说 同样在研究SM2, 请问楼主现在找到了吗?
【 在 bitowen 的大作中提到: 】
: 哦 自己写了个 但秘钥是一个整型的长度,要支持256和1024位秘钥的话还得再自己写大数类的运算
SM2官方的说明文档差不多明白是什么意思,但是实现起来一头雾水,网上使用openssl库的更是看不懂,纠结···楼主能提供一下自己实现的代码么,可以的话 我的邮箱是513701434@qq.com。学习了!
是给公司写的,不方便给代码,而且秘钥位数太低了。
【 在 liaolvkd 的大作中提到: 】
: SM2官方的说明文档差不多明白是什么意思,但是实现起来一头雾水,网上使用openssl库的更是看不懂,纠结···楼主能提供一下自己实现的代码么,可以的话 我的邮箱是513701434@qq.com。学习了!
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 -----