当前位置:   article > 正文

Linux PC OpenSSL加解密方法(附代码)_linux rsa_private_decrypt使用方法

linux rsa_private_decrypt使用方法
  • openssl genrsa -out test.key 1024  //生成一个RSA test.key的私钥

  • openssl rsa -in test.key -pubout -out rsatest_pub.key // 依据私钥产生一个公钥

  • sudo apt-get install libssl-dev

           //代码中使用openssl/rsa.h 头文件,因此您需要安装 OpenSSL 开发库以获取所需的头文件。

  • 编写rsa_test.c,参照代码如下

  • gcc rsa_test.c -o hello -lssl -lcrypto

           //-lssl 标志将程序链接到OpenSSL库,-lcrypto 标志将程序链接到 OpenSSL 密码库。

  • 执行结果

测试代码

  1. 测试代码
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<openssl/rsa.h>
  6. #include<openssl/pem.h>
  7. #include<openssl/err.h>
  8. #define OPENSSLKEY "test.key"
  9. #define PUBLICKEY "rsatest_pub.key"
  10. #define BUFFSIZE 1024
  11. char* my_encrypt(char *str,char *path_key);//加密
  12. char* my_decrypt(char *str,char *path_key);//解密
  13. int main(void){
  14. char *source="test RSA encrypt and decrypt !!!";
  15. char *ptr_en,*ptr_de;
  16. printf("source is :%s\n",source);
  17. ptr_en=my_encrypt(source,PUBLICKEY);
  18. printf("after encrypt:%s\n",ptr_en);
  19. ptr_de=my_decrypt(ptr_en,OPENSSLKEY);
  20. printf("after decrypt:%s\n",ptr_de);
  21. if(ptr_en!=NULL){
  22. free(ptr_en);
  23. }
  24. if(ptr_de!=NULL){
  25. free(ptr_de);
  26. }
  27. return 0;
  28. }
  29. char *my_encrypt(char *str,char *path_key){
  30. char *p_en;
  31. RSA *p_rsa;
  32. FILE *file;
  33. int flen,rsa_len;
  34. if((file=fopen(path_key,"r"))==NULL){
  35. perror("open key file error");
  36. return NULL;
  37. }
  38. if((p_rsa=PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL))==NULL){
  39. ERR_print_errors_fp(stdout);
  40. return NULL;
  41. }
  42. flen=strlen(str);
  43. rsa_len=RSA_size(p_rsa);
  44. p_en=(unsigned char *)malloc(rsa_len+1);
  45. memset(p_en,0,rsa_len+1);
  46. if(RSA_public_encrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_en,p_rsa,RSA_NO_PADDING)<0){
  47. return NULL;
  48. }
  49. RSA_free(p_rsa);
  50. fclose(file);
  51. return p_en;
  52. }
  53. char *my_decrypt(char *str,char *path_key){
  54. char *p_de;
  55. RSA *p_rsa;
  56. FILE *file;
  57. int rsa_len;
  58. if((file=fopen(path_key,"r"))==NULL){
  59. perror("open key file error");
  60. return NULL;
  61. }
  62. if((p_rsa=PEM_read_RSAPrivateKey(file,NULL,NULL,NULL))==NULL){
  63. ERR_print_errors_fp(stdout);
  64. return NULL;
  65. }
  66. rsa_len=RSA_size(p_rsa);
  67. p_de=(unsigned char *)malloc(rsa_len+1);
  68. memset(p_de,0,rsa_len+1);
  69. if(RSA_private_decrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_de,p_rsa,RSA_NO_PADDING)<0){
  70. return NULL;
  71. }
  72. RSA_free(p_rsa);
  73. fclose(file);
  74. return p_de;
  75. }

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

闽ICP备14008679号