源码:

#include

#include

#include

#include

#include

#include

#include

typedef struct{

unsigned char encData[128];

unsigned char encData2[128];

}ENC_DATA;

static char *MODULUS="9EC7D9A2DC5B095F8E5F90295121F41262FAEFBE9AF57B772A71F1F9D9635F8769CB78DA2BCFE9B27FC1F3AD4A3D178F8C61981225EF5DEACBDC5665F12E691AA13DDD321A59CFCF376F002036612FF3C5E057A3007FF675AFA3EDE34DC23A1A2637294870EBE823F76B5CE21E25F3FA5137F5DE12437DE0118245B927B28221";

static char *PRIVATE="8B26E30ECA6E8F3668F6FA78B0C55FB75A4A3FAD0667B152933A4991D7A815D1498F5E1EF44ACEF6CDF252E56F367DED5BA024DF6B267B7E36BD35552DFA0A4CC1E9D0A4BC8E7C76F98D4971441D6693745A0A76E175571BD160E4B1536A6EFF5A08EDA45236E96E7A4748CF4D031CA8B2F4CCE9F2E1286F432DE6495A535E43";

/**************************************

功能:获取RSA结构指针

输入:无

输出:无

返回:RSA结构指针

**************************************/

static RSA *get_key()

{

RSA *r;

int ret;

BIGNUM *bne,*bnn,*bnd;

//使用的密匙数据

unsigned long e = 75011;

//构建RSA数据结构

bne = BN_new();

bnd = BN_new();

bnn = BN_new();

ret = BN_set_word(bne, e);

BN_hex2bn(&bnd, PRIVATE);

BN_hex2bn(&bnn, MODULUS);

r = RSA_new();

r->e=bne;

r->d=bnd;

r->n=bnn;

RSA_print_fp(stdout, r, 5);

return r;

}

/**************************************

功能:加密

输入:r: RSA结构指针

in: 输入需要加密的字符串

输出:无

返回:加密后的字符串

**************************************/

static unsigned char *RSA_encrypt(RSA *r, unsigned char *in)

{

int ret, flen, i;

unsigned char *encData, *tmpData;//加密后的数据/临时指针

//准备输出的加密数据结构

flen = RSA_size(r);

encData = (unsigned char *)malloc(flen);

bzero(encData, flen);

printf("Begin RSA_private_encrypt ...\n");

ret = RSA_private_encrypt(flen, in, encData, r, RSA_NO_PADDING);

if(ret < 0)

{

printf("Encrypt failed!\n");

return;

}

printf("Size:%d\n", ret);

printf("ClearText:%s\n", in);

printf("CipherText(Hex):\n");

tmpData=encData;

for (i=0; i

{

printf("0x%02x, ", *tmpData);

tmpData++;

}

return encData;

}

/**************************************

功能:解密

输入:r: RSA结构指针

in: 输入需要解密的字符串

输出:无

返回:解密后的字符串

**************************************/

static unsigned char *RSA_decrypt(RSA *r, unsigned char *in)

{

int ret, flen;

unsigned char *decData;

flen = RSA_size(r);

decData = (unsigned char *)malloc(flen);

bzero(decData, flen);

printf("Begin RSA_public_decrypt ...\n");

ret = RSA_public_decrypt(flen, in, decData, r, RSA_NO_PADDING);

if(ret < 0)

{

printf("RSA_public_decrypt failed!\n");

return;

}

printf("Size:%d\n", ret);

printf("ClearText:%s\n", decData);

return decData;

}

int main(void) {

int i = 0;

unsigned char *in1 = "test2", *in2="test3";

unsigned char *enc1 = NULL, *enc2 = NULL;

unsigned char *dec1 = NULL, *dec2 = NULL;

RSA *r = get_key();

FILE *tmpfp = fopen("a.bin", "wb+");

ENC_DATA tmp_Data;

memset(&tmp_Data, 0, sizeof(ENC_DATA));

//加密

enc1 = RSA_encrypt(r, in1);

enc2 = RSA_encrypt(r, in2);

unsigned char *tmpData = enc1;

for (i=0; i<128; i++)

{

tmp_Data.encData[i] = *tmpData;

tmpData++;

}

tmpData = enc2;

for (i=0; i<128; i++)

{

tmp_Data.encData2[i] = *tmpData;

tmpData++;

}

fwrite(&tmp_Data,1, sizeof(ENC_DATA), tmpfp);

free(enc1);

enc1 = NULL;

free(enc2);

enc2 = NULL;

fclose(tmpfp);

RSA_free(r);

//解密

r = get_key();

tmpfp = fopen("a.bin", "rb");

memset(&tmp_Data, 0, sizeof(ENC_DATA));

fread(&tmp_Data,1, sizeof(ENC_DATA), tmpfp);

dec1 = RSA_decrypt(r, tmp_Data.encData);

dec2 = RSA_decrypt(r, tmp_Data.encData2);

free(dec1);

dec1 = NULL;

free(dec2);

dec2 = NULL;

fclose(tmpfp);

RSA_free(r);

return EXIT_SUCCESS;

}

编译:

gcc -o test test_rsa.c -I/home/openssl/include/ -L/home/openssl/lib -lcrypto -lssl -ldl

java rsa enc 源码_RSA加解密源码 | 学步园相关推荐

  1. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  2. aes加密php源码,AES加解密类源码 · ThinkPHP5高阶实战教程 --诠释为API开发而生 · 看云...

    # AES加解密类源码 > 根据网络整理 ~~~ /** * Created by PhpStorm. * Power by Mikkle * QQ:776329498 * Date: 2017 ...

  3. Java中不依赖于第三方库使用OpenSSL生成的RSA公私钥进行数据加解密

    本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...

  4. java aes ebc_Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)

    [实例简介] 实现了AES/ECB/PKCS5Padding.AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充.是标准的AES算法,支持在线AES加解密网站互 ...

  5. java aes ctr_AES CBC和CTR加解密实例

    http://www.metsky.com/archives/585.html 2012 AES(Advanced Encryption Standard,高级加密标准) 又叫Rijndael加密法, ...

  6. JAVA建行银企直连报文加解密

    接上一篇密钥交换之后获得银行提供的:银行RSA签名公钥RSA.bank.public.key,接受报文验签使用:银行DES加密私钥DES.bank.private.key,加密报文使用.还有之前自己生 ...

  7. java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...

    目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...

  8. java pkcs8格式的私钥_RSA加密解密中pkcs1与pkcs8格式私钥互相转换

    net,ios中rsa加解密使用的是pkcs1,而java使用的是pkcs8 如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是812.如果是pkcs8的格式的密钥长度为861. ...

  9. RSA生成公私钥并加解密

    1.RSA简介 RSA是目前使用最广泛的公钥密码体制之一,可以实现非对称加密.它是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leona ...

最新文章

  1. 嵌入式开发之信号采集同步---VSYNC和HSYNC的作用以及它们两者之间的关系
  2. linux下应用程序性能剖分神器gprofiler-tools-安装和使用
  3. Android Studio在线安装Android SDK注意事项
  4. 阿里云数据库MYSQL和自建数据库的对比(附新手领取免费的一个月云服务器)
  5. Arcgis for android 100.4 getFieldType ()
  6. 做游戏,学编程(C语言) 21 台球
  7. I’m stuck!
  8. Unix/Linux/BSD命令大全|实用指南
  9. matlab2018求多元函数驻点,机械优化设计课后习题答案.doc
  10. charles破解版_Charles抓包工具_charles mac\win7版
  11. 伽马校正(Gamma Correction)
  12. linux指令打开网址,linux 如何使用命令打开网址
  13. shapefile数据下的 dbf shp shx sbn sbx mdb adf等类型的文件的解释
  14. 前端剑法第二式————淬焰
  15. CSS面试须知--盒子模型、浮动及定位
  16. 无线开关量收发模块实现一发多收/一收多发
  17. 猴子分桃问题(JAVA实现)
  18. springboot o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/D:/apache-maven-3.0.5
  19. 信念就是一种观念对不对_信念是一种指导原则和信仰,让人们明了人生的意义和方向...
  20. android换肤的实现方案,Android应用开发之Android一键换肤功能实现

热门文章

  1. Java技巧:深拷贝的两种方式(转)
  2. SpringBoot注解分析
  3. 滚动条组件 http://www.w3cfuns.com/notes/15098/96195b77bdbcb601590f67f971770bb8.html
  4. C# 通过Exchange server 发送邮件
  5. 人工智能——数据、信息与知识
  6. 软考信息系统项目管理师2021_信息化与信息系统_项目管理阶段_方法_网络协议---软考高级之信息系统项目管理师003
  7. ASP.Net学习笔记004--基于ashx方式的ASP.Net开发1
  8. C语言中宏定义和函数的取舍
  9. std::lexicographical_compare
  10. netbeans打包java程序,并包含外部jar包