当前位置:   article > 正文

sm2签名与sm4加密(四)证书特辑篇_sm2_private_key_info_decrypt_from_der

sm2_private_key_info_decrypt_from_der

其实到三已经完结了,领导在openssl上一顿命令操作:openssl ecparam -genkey -name SM2 -out privtest.key

openssl ec -in privtest.key -pubout -out pubtest.key

生成了privtest.key和pubtest.key两个文件,给了命令就是想办法把这俩文件里的密钥读出来,来实现加密解密,不然生成的都是不可见字符,没办法实现双方密钥交换。

这可就犯了难了,直接阅读openssl的源码非常困难,并没找到经过怎样的过程将xykey三个不可见字符变成大概是base64编码的一个东西,也尝试将文件中的大概是base64编码的密钥进行反编码,结果除了让人看不懂之外还是看不懂。在csdn上也没有文章指出这些命令生成的文件究竟是什么格式,也咨询过相关大佬

直到最后意外的发现这个文件的格式为pem格式文件,顺着这个线索摸索下去,先是找到了openssl的读取pem文件的函数,但是因为我是基于gmssl实现的,参考着openssl找到了gmssl里的读取pem格式的函数,sm2_public_key_info_from_pem,名字很清楚,sm2从pem中读取公钥,而读取公钥使用sm2_private_key_from_pem函数,代码参考的大概这个样子 

  1. void main() {
  2. SM2_KEY sm2_key;
  3. FILE* pubkeyfp = NULL;
  4. FILE* prikeyfp = NULL;
  5. int ret = 0;
  6. memset(&sm2_key, 0x00, sizeof(sm2_key));
  7. //sm2_key_generate(&sm2_key);
  8. //printf("私钥=[%#x],公钥x=[%#x],y=[%#x]\n", sm2_key.private_key,sm2_key.public_key.x,sm2_key.public_key.y);
  9. if (!(pubkeyfp = fopen("pubtest.key", "rb"))) {
  10. printf("pubkey file open fail\n");
  11. ret = -1;
  12. goto end;
  13. }
  14. if (sm2_public_key_info_from_pem(&sm2_key, pubkeyfp) != 1) {
  15. printf("pubkey get fail\n");
  16. ret = -1;
  17. goto end;
  18. }
  19. if (!(prikeyfp = fopen("privtest.key", "rb"))) {
  20. printf("privkey file open fail\n");
  21. ret = -1;
  22. goto end;
  23. }
  24. //sm2_private_key_info_decrypt_from_pem
  25. //sm2_private_key_from_pem
  26. if (sm2_private_key_from_pem(&sm2_key, prikeyfp) != 1) {
  27. printf("privkey get fail\n");
  28. ret = -1;
  29. goto end;
  30. }
  31. end:
  32. if (pubkeyfp != NULL) {
  33. fclose(pubkeyfp);
  34. pubkeyfp = NULL;
  35. }
  36. if (prikeyfp != NULL) {
  37. fclose(prikeyfp);
  38. prikeyfp = NULL;
  39. }
  40. return ret;
  41. }

但其实还是存在一个问题,就是私钥文件读取的时候-----BEGIN EC PARAMETERS-----是无法识别的,在删除PARAMETERS之后两个文件的公私钥能够正常读取且能够完成加签验签操作

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/118191
推荐阅读
相关标签
  

闽ICP备14008679号