openssl关于RSA算法
来源:互联网 发布:淘宝价格法违规投诉 编辑:程序博客网 时间:2024/05/17 21:41
rsa为非对称算法,加密和解密的密钥是不同的,一个密钥进行加密,另一个密钥进行解密。这个过程是相互的,用私钥加密,公钥解密,被称为签名。用公钥加密,用私钥解密,就是通常说的加密。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/time.h>#include <openssl/rsa.h>#include <openssl/pem.h>#include <openssl/err.h>#define OPENSSLKEY "test.key"#define PUBLICKEY "test_pub.key"#define BUFFSIZE 1024char* STR = "abcdefghigklm";char* my_encrypt(char *str,char *path_key);//加密char* my_decrypt(char *str,char *path_key);//解密long get_mesl() { struct timeval tv; gettimeofday(&tv,NULL); return tv.tv_sec*1000 + tv.tv_usec/1000;}long get_trick() { struct timeval tv; gettimeofday(&tv,NULL); return tv.tv_sec*1000000 + tv.tv_usec;}int main(void){ char *source = STR; char *ptr_en,*ptr_de; printf("source is:%s, len:%d\n",source, strlen(source)); long start = get_trick(); ptr_en=my_encrypt(source,PUBLICKEY); long spend = get_trick() - start; printf("spend:%ld\n", spend); printf("after encrypt len:%d\n", strlen(ptr_en)); start = get_trick(); ptr_de=my_decrypt(ptr_en,OPENSSLKEY); spend = get_trick() - start; printf("spend:%ld\n", spend); printf("after decrypt:%s, len:%d\n",ptr_de, strlen(ptr_de)); if(ptr_en!=NULL){ free(ptr_en); } if(ptr_de!=NULL){ free(ptr_de); } return 0;}char *my_encrypt(char *str,char *path_key){ char *p_en; RSA *p_rsa; FILE *file; int flen,rsa_len; if((file=fopen(path_key,"r"))==NULL){ perror("open key file error"); return NULL; } if((p_rsa=PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL))==NULL){ ERR_print_errors_fp(stdout); return NULL; } flen=strlen(str); rsa_len=RSA_size(p_rsa); p_en=(unsigned char *)malloc(rsa_len+1); memset(p_en,0,rsa_len+1); if(RSA_public_encrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_en,p_rsa,RSA_NO_PADDING)<0){ return NULL; } RSA_free(p_rsa); fclose(file); return p_en;}char *my_decrypt(char *str,char *path_key){ char *p_de; RSA *p_rsa; FILE *file; int rsa_len; if((file=fopen(path_key,"r"))==NULL){ perror("open key file error"); return NULL; } if((p_rsa=PEM_read_RSAPrivateKey(file,NULL,NULL,NULL))==NULL){ ERR_print_errors_fp(stdout); return NULL; } rsa_len=RSA_size(p_rsa); p_de=(unsigned char *)malloc(rsa_len+1); memset(p_de,0,rsa_len+1); if(RSA_private_decrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_de,p_rsa,RSA_NO_PADDING)<0){ return NULL; } RSA_free(p_rsa); fclose(file); return p_de;}
测算的数据显示无论加密还是解密都耗时了1000微妙以上,详细数据调用指令也可以,openssl speed rsa ,这指令的输出很直观,不再赘述。
0 0
- openssl关于RSA算法
- openssl和java关于rsa的交互
- 关于OPENSSL 实现 RSA加密几个问题
- 利用Openssl进行RSA加密签名算法
- 用OpenSSL实现RSA算法加密(转)
- OpenSSL应用之公钥算法RSA
- openssl中aes、rsa算法的使用
- RSA算法原理及其Openssl库函数
- openssl dsa rsa算法命令行使用
- OpenSSL RSA算法 非对称加密
- OpenSSL AES, RSA 算法加密本地文件
- openssl关于des算法
- openssl rsa
- openssl rsa
- RSA算法加解密---crypto++库和OpenSSL库
- openssl 相关的rsa与sha1算法签名与验证
- openssl rsa RSA处理工具
- RSA in OPENSSL
- tensorflow 初认识
- poj3090 Visible Lattice Points
- 每日小记2017.2.20
- Arrays.toList(T[] t)返回的List不可执行add方法
- swing常用类简单学习
- openssl关于RSA算法
- Android解析JSON数据(三)——FastJson解析
- Hibernate框架
- 详解JS构造函数方法与原型prototype上的方法
- 蓝桥杯 算法提高 周期字串
- Fatal error in launcher: Unable to create process using解决办法
- 历届试题 武功秘籍(找规律)
- php 实现递归的方式
- swift学习笔记(10)-属性