环境的配置可以参考http://www.cnblogs.com/yangyquin/p/5284530.html

网络上传输的数据很容易被抓包,如果不加密,那么网络数
据很容易被窃取,诸如用户名、密码这些明感的信息一旦丢
失,将会造成巨大的损失。
2、常用的加密方式
对称加密:加密方和解密方使用同一个秘钥
                  优点:加密解密过程简单,高效
                  缺点:有一 方泄密了,则整个加密就失去了意义
非对称加密:加密方和解密方使用不同的秘钥
                  优点:解密的秘钥无法由加密的秘钥,即使加密方暴露出  了秘钥也没事,这种加密方和解密方使用不同的秘  钥,大大提高了安全性
                  缺点:效率比较低下,过程比较繁琐
3、辅助概念
1、质数的概念
2、互为质数的概念
4、RSA加密秘钥的获取
step1:随机选取两个数p、q,满足互质
 
step2:n=p*q,//公开模数 Public Modules,其二进制位数即为                           秘钥长度
step3:g=f(p,q)=(p-1)*(q-1)
step4:在1和g之间任意一个随机整数e,满足1<e<g,//Public                          Exponent,公开指数
step5:由 e*d mod g = 1 关系式推导出来d,//Private Exponent,  私有指数
5、RSA加密秘钥的获取
RSA算法中的:
           公开秘钥=(e,n)
           私有秘钥=(d,n)
6、RSA加密解密算法
加密算法:设M为需要加密的明文数据
   则加密算法为:Encrypt_Message = M^e mod n
解密算法:设D为需要解密的密文数据
    则解密算法为:Decrypt_Message = D^d mod n
 
8、RSA算法缺点
1 效率非常低下
2 密文数据较之原数据,其长度大大增加,即数据冗余太严重
 #include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <openssl/rsa.h>
#include <openssl/err.h>
#pragma comment(lib,"libeay32.lib")
#pragma comment(lib,"ssleay32.lib")
#define P "BCF3"
#define Q "116AB"
#define N "CDAE1851"
#define E "10001"
#define D "8C88F2A5"
int My_Rsa_public_encrypt(int flen, const unsigned char *from, unsigned char *to);
int My_Rsa_private_decrypt(int flen, const unsigned char *from, unsigned char *to); int main(void)
{
char* from ="";
unsigned char sz []={};
unsigned char decsz[]={};
My_Rsa_public_encrypt(lstrlen(from)+,(unsigned char*)from,sz);
My_Rsa_private_decrypt(lstrlen((char*)sz),sz,decsz);
system("pause");
return ;
}
int My_Rsa_public_encrypt(int flen, const unsigned char *from, unsigned char *to)
{
RSA* rSa = RSA_new();
if (!rSa)return -;
BIGNUM * bIgnUm = BN_new();
BIGNUM * bIgnUe = BN_new();
if (!bIgnUe || !bIgnUm)
{
RSA_free(rSa);
BN_free(bIgnUe);
BN_free(bIgnUm);
return -;
}
BN_init(bIgnUm);
BN_init(bIgnUe);
BN_hex2bn(&bIgnUm,N);
BN_hex2bn(&bIgnUe,E);
rSa->n = bIgnUm;
rSa->e = bIgnUe;
ERR_load_crypto_strings();
int nRet = RSA_public_encrypt(flen,from,to,rSa,RSA_NO_PADDING);
DWORD dwError = ERR_get_error();
if(nRet<)
{
printf("%s\r\n",ERR_lib_error_string(dwError));
printf("%s\r\n",ERR_func_error_string(dwError));
printf("%s\r\n",ERR_reason_error_string(dwError));
BN_free(bIgnUm);
BN_free(bIgnUe);
RSA_free(rSa);
return -;
}
printf("%X\r\n",*(PDWORD)to);
ERR_free_strings();
BN_free(bIgnUe);
BN_free(bIgnUm);
RSA_free(rSa);
return ; }
int My_Rsa_private_decrypt(int flen, const unsigned char *from, unsigned char *to)
{
RSA* rSa = RSA_new();
if (!rSa)return -;
BIGNUM * bIgnUm = BN_new();
BIGNUM *bIgnUp = BN_new();
BIGNUM * bIgnUe = BN_new();
if (!bIgnUe || !bIgnUm ||!bIgnUp)
{
RSA_free(rSa);
BN_free(bIgnUe);
BN_free(bIgnUm);
BN_free(bIgnUp);
return -;
}
BN_init(bIgnUm);
BN_init(bIgnUe);
BN_init(bIgnUp);
BN_hex2bn(&bIgnUp,E);
BN_hex2bn(&bIgnUm,N);
BN_hex2bn(&bIgnUe,D);
rSa->n = bIgnUm;
rSa->d = bIgnUe;
rSa->e = bIgnUp;
ERR_load_crypto_strings();
int nRet = RSA_private_decrypt(flen,from,to,rSa,RSA_NO_PADDING);
DWORD dwError = ERR_get_error();
if(nRet<)
{
printf("%s\r\n",ERR_lib_error_string(dwError));
printf("%s\r\n",ERR_func_error_string(dwError));
printf("%s\r\n",ERR_reason_error_string(dwError));
BN_free(bIgnUm);
BN_free(bIgnUe);
RSA_free(rSa);
return -;
}
printf("%s\r\n",to);
ERR_free_strings();
BN_free(bIgnUe);
BN_free(bIgnUm);
BN_free(bIgnUp);
RSA_free(rSa);
return ;
}
 
 
 
 
 
 
 

OpenSsl库 Rsa的简单使用的更多相关文章

  1. 用openssl库RSA加密解密

    #include <stdio.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include < ...

  2. DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项

    DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...

  3. C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

    之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...

  4. 使用openssl库实现RSA、AES数据加密

         openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所 ...

  5. [转]使用openssl库实现RSA、AES数据加密

    openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做 ...

  6. RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例

    前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密  私加 ===================== ...

  7. C++调用openssl库生成RSA加密秘钥对

    直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...

  8. 利用OpenSSL库对Socket传输进行安全加密(RSA+AES)

    轉自:http://blog.chinaunix.net/uid-9543173-id-3921143.html 利用OpenSSL库对Socket传输进行安全加密(RSA+AES) 1. 利用RSA ...

  9. OpenSSL库验证PKCS7签名

    使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下: //signature ...

随机推荐

  1. vmware中centos、redhat桥接网络配置

    第一步 第二步 第三步 centos: redhat:

  2. hdu 1532 Drainage Ditches(最大流模板题)

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. [kuangbin带你飞]专题九 连通图C - Critical Links UVA - 796

    这道题就是要求桥的个数. 那么桥相应的也有判定的定理: 在和u相邻的节点中,存在一个节点是最小的时间戳都比 当前u的访问次序要大,也就是说这个点是只能通过果u到达,那么 他们之间相邻的边就是的桥 #i ...

  4. hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)

    Problem - 3374   KMP求循环节. http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html   循环节推导的证明相当 ...

  5. 4-10 items设计

    1,items相当于dict,但是又比字典好 2,parse.urljoin(response.url,post_url)方法,其中image_url是一个域名的话,其中的当前域名就不用再添加. yi ...

  6. linux 安装一个共享的处理者

    共享中断通过 request_irq 来安装就像不共享的一样, 但是有 2 个不同: SA_SHIRQ 位必须在 flags 参数中指定, 当请求中断时. dev_id 参数必须是独特的. 任何模块地 ...

  7. 算法提高 密码锁 (BFS)

    问题描述 你获得了一个据说是古代玛雅人制作的箱子.你非常想打开箱子看看里面有什么东西,但是不幸的是,正如所有故事里一样,神秘的箱子出现的时候总是会挂着神秘的锁. 这个锁上面看起来有  N  个数字,它 ...

  8. html 中文占位符

    => 普通的英文半角空格   =>   =>   => no-break space (普通的英文半角空格但不换行)   => 中文全角空格 (一个中文宽度)   =&g ...

  9. CF1208

    CF1208 打的话貌似能够涨分的样子? A 水题 B 枚举左端点,看看右端点的最近位置 开一个类似于桶的东西维护一下上一次出现位置 左端点左边就删掉,否则就要将上一次出现的位置删掉 时间复杂度\(O ...

  10. HDU - 3530 Subsequence (单调队列)

    Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...