java rsa enc 源码_RSA加解密源码 | 学步园
源码:
#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加解密源码 | 学步园相关推荐
- java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
- aes加密php源码,AES加解密类源码 · ThinkPHP5高阶实战教程 --诠释为API开发而生 · 看云...
# AES加解密类源码 > 根据网络整理 ~~~ /** * Created by PhpStorm. * Power by Mikkle * QQ:776329498 * Date: 2017 ...
- Java中不依赖于第三方库使用OpenSSL生成的RSA公私钥进行数据加解密
本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...
- java aes ebc_Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)
[实例简介] 实现了AES/ECB/PKCS5Padding.AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充.是标准的AES算法,支持在线AES加解密网站互 ...
- java aes ctr_AES CBC和CTR加解密实例
http://www.metsky.com/archives/585.html 2012 AES(Advanced Encryption Standard,高级加密标准) 又叫Rijndael加密法, ...
- JAVA建行银企直连报文加解密
接上一篇密钥交换之后获得银行提供的:银行RSA签名公钥RSA.bank.public.key,接受报文验签使用:银行DES加密私钥DES.bank.private.key,加密报文使用.还有之前自己生 ...
- java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...
目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...
- java pkcs8格式的私钥_RSA加密解密中pkcs1与pkcs8格式私钥互相转换
net,ios中rsa加解密使用的是pkcs1,而java使用的是pkcs8 如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是812.如果是pkcs8的格式的密钥长度为861. ...
- RSA生成公私钥并加解密
1.RSA简介 RSA是目前使用最广泛的公钥密码体制之一,可以实现非对称加密.它是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leona ...
最新文章
- 嵌入式开发之信号采集同步---VSYNC和HSYNC的作用以及它们两者之间的关系
- linux下应用程序性能剖分神器gprofiler-tools-安装和使用
- Android Studio在线安装Android SDK注意事项
- 阿里云数据库MYSQL和自建数据库的对比(附新手领取免费的一个月云服务器)
- Arcgis for android 100.4 getFieldType ()
- 做游戏,学编程(C语言) 21 台球
- I’m stuck!
- Unix/Linux/BSD命令大全|实用指南
- matlab2018求多元函数驻点,机械优化设计课后习题答案.doc
- charles破解版_Charles抓包工具_charles mac\win7版
- 伽马校正(Gamma Correction)
- linux指令打开网址,linux 如何使用命令打开网址
- shapefile数据下的 dbf shp shx sbn sbx mdb adf等类型的文件的解释
- 前端剑法第二式————淬焰
- CSS面试须知--盒子模型、浮动及定位
- 无线开关量收发模块实现一发多收/一收多发
- 猴子分桃问题(JAVA实现)
- springboot o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/D:/apache-maven-3.0.5
- 信念就是一种观念对不对_信念是一种指导原则和信仰,让人们明了人生的意义和方向...
- android换肤的实现方案,Android应用开发之Android一键换肤功能实现
热门文章
- Java技巧:深拷贝的两种方式(转)
- SpringBoot注解分析
- 滚动条组件 http://www.w3cfuns.com/notes/15098/96195b77bdbcb601590f67f971770bb8.html
- C# 通过Exchange server 发送邮件
- 人工智能——数据、信息与知识
- 软考信息系统项目管理师2021_信息化与信息系统_项目管理阶段_方法_网络协议---软考高级之信息系统项目管理师003
- ASP.Net学习笔记004--基于ashx方式的ASP.Net开发1
- C语言中宏定义和函数的取舍
- std::lexicographical_compare
- netbeans打包java程序,并包含外部jar包