环境的配置可以参考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. Android Tween和Frame 动画

    关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放. ...

  2. 详解Python中内置的NotImplemented类型的用法

    它是什么? ? 1 2 >>> type(NotImplemented) <type 'NotImplementedType'> NotImplemented 是Pyth ...

  3. mysql 中 DATE_ADD函数和 DATE_SUB函数用法

    mysql 中 DATE_ADD(date,INTERVAL expr type) 和 DATE_SUB(date,INTERVAL expr type) 这些函数执行日期运算. date 是一个 D ...

  4. USDT钱包安装

    安装USDT钱包 wget https://bintray.com/artifact/download/omni/OmniBinaries/omnicore-0.4.0-x86_64-linux-gn ...

  5. oracle 通过内部函数提高SQL效率.

    SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*) FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H WHER ...

  6. 2016国产开源软件Top100(Q1)

    2016国产开源软件Top100(Q1) 随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向 ...

  7. Layer(Web弹窗)

    Layer弹窗的用法: <script src="jQuery的路径"></script> <!-- 你必须先引入jQuery1.8或以上版本 --& ...

  8. hdu 5742 It's All In The Mind(2016多校第二场)

    It's All In The Mind Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  9. jq实现简单手风琴效果

    文章地址:https://www.cnblogs.com/sandraryan/ 利用slideUp slideDown动画 <!DOCTYPE html> <html lang=& ...

  10. Python os.getcwd() 方法

    Python os.getcwd() 方法  Python OS 文件/目录方法 概述 os.getcwd() 方法用于返回当前工作目录. 语法 getcwd()方法语法格式如下: os.getcwd ...