rsa加密文件 python,python rsa 公钥解密
OpenSSL是一个强大的工具包,集成了许多加密算法和实用程序。这意味着您可以使用提供的命令实例工具来生成密钥和证书,加密和解密文件,或者使用提供的API接口来加密代码中的传输信息。
RSA是一种非对称加密算法。简单来说,非对称加密算法就是加密和解密一个文件需要两个密钥:一个用于加密,一个用于公钥,一个用于解密,一个用于私钥。证书可用于允许使用公钥。
今天研究的是OpenSSL的RSA加密。主要包括用公钥和密钥解密文件,不涉及证书操作。想集体了解的人可以去:
请参考。
首先,介绍了OpenSSL工具在控制台上的简单使用。
生成密钥:
openssl genrsa -out测试。密钥1024
Where -out指定要生成的文件。必须注意,这个文件包含两个部分:公钥和密钥。这意味着这个文件可以用于加密和解密。最后1024是生成的密钥的长度。
Openssl可以从这个文件中提取公钥。
OpenSSL RSA-in test . key-pub out-out test _ pub . key
-in指定输入文件,而-out指定用于提取生成的公钥的文件名。这样,我们就有了公钥和私钥(包括公钥)。现在你可以用公钥加密文件了。
在目录中创建一个hello文本文件,并用之前生成的公钥对其进行加密。
opensslrsautl-encrypt-in hello-inkey test _ pub . key-pub in-out hello . en
-in指定要加密的文件,-inkey指定密钥,-pubin表示使用纯公钥文件加密,-out是加密的文件。
解密文件:
opensslrsautl-decrypt-in hello . en-inkey test . key-out hello . de
-in指定加密文件,-inkey指定私钥文件,-out指定解密文件。
至此,暂时解密的过程结束。实际上,证书可能包括在内。这是下一次机会~
请参考。
本节描述了程序如何利用之前生成的test.key和test_pub.key对信息进行加密和解密,当然你也可以直接使用openssl的API来生成密钥文件。
下面的示例使用现有密钥加密和解密源字符串。
1 #包含
2 #包含3 #包含
4 #包含
5 #包含
6 #包含
7 #定义OPENSSLKEY test.key
8 #定义公钥 test _ pub.key 9#定义缓冲区大小1024
10char*my_encrypt(char*str,char * path _ key);//11 encrypt char * my _ decrypt(char * str,char * path _ key);解密//12输入main (void)
13 char *source=我喜欢跳舞!;
14 char *ptr_en,* ptr _ de
15打印(来源为:% s\n),来源);
16ptr_en=my_encrypt(source,public key);
17打印机(加密后:% s (n),ptr _ en);
18ptr_de=my_decrypt(ptr_en,OPENSSLKEY19打印(解密后:% s\n(,ptr _ de));
20if(ptr_en!=NULL ) {
21 free(ptr _ en;
22 }
23if(ptr_de!=NULL ) {
24免费(ptr _ de);
25 }
26返回0;
27 }
28char*my_encrypt(char*str,char *path_key))
29 char * p _ en
30 RSA * p _ rsa
1个文件*文件
32 int flen,rsa _ len
33if () file=fopen(path_key, r ))==NULL))
34p error(openkeyfileerror);
35返回null
36 }
37if((p _ RSA=PEM _ read _ RSA _ pubkey)file,NULL,NULL ) )==NULL ) {
38//if (p _ RSA=PEM _ read _ RSA公钥(file,NULL,NULL) )=null)可以用源文件39 err _ prinnnic密钥代替这个生死,也可以用公钥。
40返回null
41 }
42 flen=strlen(str;
43 RSA _ Len=RSA _ size(p _ RSA;
44p _ en=(unsignedchar *)malloc)RSA _ len 1);
45memset(p_en,0,RSA _ len 1);
46if(RSA _ public _ encrypt)RSA _ len,(unsigned char * ) str,(unsigned char * ) p_en,p_rsa,RSA_no_pppi
47回空;
48 }
49 RSA _ free(p _ RSA);
50份文件;
51返回p _ en
52 }
53char*my_decrypt(char*str,char *path_key))
54 char * p _ de
55 RSA * p _ rsa
56份文件*
57 int rsa _ len
58if () file=fopen(path_key, r ))==NULL))
59 perror(openkeyfileerror);
60返回null
61 }
62if ((p _ RSA=PEM _ read _ RSA私钥)文件,NULL,NULL){
63 err _ print _ errors _ FP(stdout;
64返回空;
65 }
66 RSA _ Len=RSA _ size(p _ RSA;
67p _ de=(unsignedchar *)malloc)RSA _ len 1);
68memset(p_de,0,RSA _ len 1);
69if(RSA _ private _ decrypt(RSA _ len,)unsigned char * ) str,)unsigned char * ) p_de,p_rsa,RSA_no_
70返回空;
71 }
72 RSA _ free(p _ RSA);
73 fclose(文件);
74返回p _ de
75 }
这个问题有点奇怪:
第37、38行发现,使用心脏出血提供的PEM_read_RSAPublicKey方法从文件中获取密钥会继续失败。
我觉得是文件形式的问题~
心脏出血详细介绍:单击此处
心脏出血下载地址:单击此处
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。