网上一大片讲怎么加解密字符串的,找了大半天也没找到讲加解密二进制数据的,于是自己研究了下,分享给大家。

加解密函数:

#include <rsa.h>
#include <randpool.h>
#include <filters.h>void GenerateRSAKey(byte seed[], size_t seedLen, size_t keyLen,byte privateKey[], size_t &privateKeyLen,byte publicKey[], size_t &publicKeyLen)
{CryptoPP::RandomPool randomPool;randomPool.Put(seed, seedLen);CryptoPP::RSAES_OAEP_SHA_Decryptor decryptor(randomPool, 1024);CryptoPP::ArraySink decArr(privateKey, privateKeyLen);decryptor.DEREncode(decArr);decArr.MessageEnd();privateKeyLen = decArr.TotalPutLength();CryptoPP::RSAES_OAEP_SHA_Encryptor encryptor(decryptor);CryptoPP::ArraySink encArr(publicKey, publicKeyLen);encryptor.DEREncode(encArr);encArr.MessageEnd();publicKeyLen = encArr.TotalPutLength();
}void RSAEncryptData(byte seed[], size_t seedLen, byte publicKey[], size_t publicKeyLen,byte plainData[], size_t plainDataLen, byte cipherData[], size_t &cipherDataLen)
{CryptoPP::ArraySource keyArr(publicKey, publicKeyLen, true);CryptoPP::RSAES_OAEP_SHA_Encryptor enc;enc.AccessKey().Load(keyArr);CryptoPP::RandomPool randomPool;randomPool.Put(seed, seedLen);size_t putLen = 0;size_t fixedLen = enc.FixedMaxPlaintextLength();for (size_t i = 0; i < plainDataLen; i += fixedLen){size_t len = fixedLen < (plainDataLen - i) ? fixedLen : (plainDataLen - i);CryptoPP::ArraySink *dstArr = new CryptoPP::ArraySink(cipherData + putLen, cipherDataLen - putLen);CryptoPP::ArraySource source(plainData + i, len, true, new CryptoPP::PK_EncryptorFilter(randomPool, enc, dstArr));putLen += dstArr->TotalPutLength();}cipherDataLen = putLen;
}void RSADecryptData(byte seed[], size_t seedLen, byte privateKey[], size_t privateKeyLen,byte cipherData[], size_t cipherDataLen, byte plainData[], size_t &plainDataLen)
{CryptoPP::ArraySource keyArr(privateKey, privateKeyLen, true);CryptoPP::RSAES_OAEP_SHA_Decryptor dec;dec.AccessKey().Load(keyArr);CryptoPP::RandomPool randomPool;randomPool.Put(seed, seedLen);size_t putLen = 0;size_t fixedLen = dec.FixedCiphertextLength();for (size_t i = 0; i < cipherDataLen; i += fixedLen){size_t len = fixedLen < (cipherDataLen - i) ? fixedLen : (cipherDataLen - i);CryptoPP::ArraySink *dstArr = new CryptoPP::ArraySink(plainData + putLen, plainDataLen - putLen);CryptoPP::ArraySource source(cipherData + i, len, true, new CryptoPP::PK_DecryptorFilter(randomPool, dec, dstArr));putLen += dstArr->TotalPutLength();}plainDataLen = putLen;
}

  

测试函数:

#include <iostream>
#include <string>
#include "CryptRsa.h"using namespace std;
using namespace CryptoPP;int main(int argc, char *argv)
{try{string plaintext = "{0FA152B4-D176-4D95-8363-BA9DFC787651}";cout << plaintext << endl;cout << plaintext.length() << endl;byte seed[] = { 0xCA, 0xDA, 0x63, 0xEC, 0x9B, 0x89, 0x40, 0xDE, 0x8E, 0x64, 0x94, 0xE8, 0x79, 0xEA, 0x32, 0x9E };size_t privateKeyLen = 2048;byte *privateKey = new byte[privateKeyLen];size_t publicKeyLen = 2048;byte *publicKey = new byte[publicKeyLen];GenerateRSAKey(seed, sizeof(seed), 1024, privateKey, privateKeyLen, publicKey, publicKeyLen);size_t cipherDataLen = 2048;byte *cipherData = new byte[cipherDataLen];RSAEncryptData(seed, sizeof(seed), publicKey, publicKeyLen,(byte*)plaintext.c_str(), plaintext.length(), cipherData, cipherDataLen);size_t plainDataLen = plaintext.length() * 2;byte *plainData = new byte[plainDataLen];RSADecryptData(seed, sizeof(seed), privateKey, privateKeyLen,cipherData, cipherDataLen, plainData, plainDataLen);plainData[plainDataLen] = '\0';cout << (char*)plainData << endl;cout << plainDataLen << endl;delete[] plainData;delete[] cipherData;delete[] publicKey;delete[] privateKey;}catch (std::exception &e){cout << e.what() << endl;}cin.get();return 0;
}

  

转载于:https://www.cnblogs.com/icedream/p/4165141.html

以Crypto++实现RSA加解密二进制数据相关推荐

  1. [crypto]-02-非对称加解密RSA原理概念详解

    说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...

  2. Crypto++库在VS 2005中的使用——RSA加解密

    Crypto++库在VS 2005中的使用--RSA加解密 源代码:下载 一.   下载Crypto++ Library Crypto++ Library的官方网:http://www.cryptop ...

  3. 使用Crypto++5.5.2完成RSA加解密,真正的把公钥放在字符串内,而不是放在文件内

    本文摘自 小楼一夜听春雨得博客: http://hi.baidu.com/magic475/blog/item/e8b82139020ae622b8998f96.html 使用Crypto++5.5. ...

  4. openresty 与 java RSA加解密

    上一篇搞定了openresty与java之间的aes加解密.这一篇就来说说openresty与java之间RSA的加解密.在测试的过程中.发现了与aes同样的问题.就是openresty支持的填充模式 ...

  5. RSA加解密算法原理

    本文译自http://www.muppetlabs.com/~breadbox/txt/rsa.html,作者Brian Raiter. This article is translated from ...

  6. openssl在多平台和多语言之间进行RSA加解密注意事项

    首先说一下平台和语言: 系统平台为CentOS6.3,RSA加解密时使用NOPADDING进行填充 1)使用C/C++调用系统自带的openssl 2)Android4.2模拟器,第三方openssl ...

  7. 前后端java+vue 实现rsa 加解密与摘要签名算法

    RSA有两个密钥,一个是公开的,称为公开密钥:一个是私密的,称为私密密钥. 特点: 公开密钥是对大众公开的,私密密钥是服务器私有的,两者不能互推得出. 用公开密钥对数据进行加密,私密密钥可解密:私密密 ...

  8. python3 RSA加解密

    python3 可以使用 Crypto.PublicKey.RSA 和 rsa 生成公钥.私钥. 其中 python3.6 Crypto 库 使用 pip3 install pycryptodome ...

  9. [crypto]-01-对称加解密AES原理概念详解

    1.对称加解密 术语:P是明文,C是密文,K是密钥,E是加密算法,D是解密算 (1).常用的对称加解密有哪些? (2).加解密的模式 [ecb]这种模式是将整个明文分成若干段相同的小段,然后对每一小段 ...

最新文章

  1. linux能用airport吗_苹果下架最后两款 AirPort 产品,正式退出路由器市场
  2. ListView setOnItemClickListener无效原因分析
  3. linux阿波罗配置文件放在哪,Apollo阿波罗配置中心
  4. 高等数学下-赵立军-北京大学出版社-题解-练习8.5
  5. 类的序列化[Serializable]
  6. Android自动化测试探索
  7. webgl编程指南源码_ThreeJS 源码剖析之 Renderer(一)
  8. Apache的Mod_rewrite学习(RewriteRule重写规则的语法)
  9. Android java获取行号和函数名
  10. 《HTTP权威指南》– 6.代理
  11. 泰安出差,使用产品有所感触
  12. net core mysql开源框架_.net core 基于Dapper 的分库分表开源框架(core-data)
  13. ie11 华表_IE11网页加载项和控件不能运行的解决方法
  14. Chartboost ane sdk 使用教程
  15. 设计模式回顾——模板模式(C++)
  16. Linux内核版本和发行版本的区别
  17. 疫情面试了13家企业软件测试岗位,面试题整理
  18. 保卫萝卜迅玩版53关php,保卫萝卜迅玩版 28关 | 手游网游页游攻略大全
  19. 打印机显示无法连接计算机,网络打印提示:Windows无法连接到打印机,请检查打印机名并重试...
  20. php 将二维数组翻译成多种语言

热门文章

  1. 周围剃光头顶留长发型_?22岁亿万富翁凯莉登杂志,顶着5斤“鸟窝头”凹造型,绝代艳后...
  2. android root点击事件,在Android中使用InputManagerService进行事件传递
  3. android webview video标签,Android WebView支持html5 video标签
  4. 昔年浅谈做害虫消杀防护的用什么推广效果好?
  5. java用hashmap_Java集合之HashMap的用法
  6. 微信的服务器是联想的吗,吕再峰:联想希望借微信建设一个新的服务通路
  7. keyshot分辨率多少合适_投影仪分辨率和画质,你想知道的都在这里!
  8. 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型障碍物判定
  9. 大橙子_【大橙子喜讯】工程学子斩获佳绩!——机械创新设计大赛
  10. 如何将项目发布到阿里云_尚硅谷基于阿里云搭建数据仓库(实时)项目视频发布...