C++ DES 加密(Cryptopp )

拜雨学Cryptopp 在Android中使用Cryptopp Cryptopp是一个C++编写的加密库,支持多种加密。常见的MD5、SHA、RSA、DES等等。因为自己在学习JNI,但是单纯的学习C/C++学不进去,所以编译一个加密库来强化学习。 本次学习主要目标 成功编译Cryptopp并且在Android中使用该库进行基本加密。 对于程序员来说学习一种语言或者框架最好的就是去官网。下面说明下Cryptopp官网的几个常用的地址 官网首页 编译教程 官方示例 咱们就按着这个来学习在Android中使用Cryptopp来加密 阅读详情

转载注明出处

http://blog.youkuaiyun.com/xugangjava



写了一个DES加密的插件,用的是crypto++库,各种字符的转换有点晕

插件是ATL的Activex 只贴出关键代码,希望对你有用,如有不足欢迎指出。

//加密代码

STDMETHODIMP CMAddr::En(BSTR instr, BSTR* outstr)
{
CComBSTR com_instr(instr);


if(com_instr.Length()==0){
com_instr.Empty();
return S_OK;
}


int pos=0;
const int bsize=DES::BLOCKSIZE;
char* ptr_instr=NULL;
CString cstr_result;
CString cstr_buffer;
DESEncryption encryption_DES;
unsigned char key[ DES::KEYLENGTH ] = "xugangf";
byte blockin[bsize];
byte blockout[bsize];
        //设置密钥
encryption_DES.SetKey(key, DES::KEYLENGTH);


int nwLen=0;
        //将宽字节字符集转成多字节,crypto 没unicode的版本让我比较蛋疼
nwLen=WideCharToMultiByte(CP_ACP,NULL,com_instr.m_str,-1,NULL,0,NULL,FALSE);
ptr_instr=new char[nwLen+bsize+1];
if(!ptr_instr)
{
delete[] ptr_instr;
return FALSE;
}
WideCharToMultiByte(CP_ACP,NULL,com_instr.m_str,-1,ptr_instr,nwLen,NULL,FALSE);


while(pos<nwLen)
{
ZeroMemory(blockin,bsize);
ZeroMemory(blockout,bsize);
memcpy_s(blockin,bsize,ptr_instr+pos,bsize);
                //解密数据块
encryption_DES.ProcessBlock(blockin, blockout);
//转换成16进制数字输出,不然加密后是乱码而且无法解密,
//codepage找不到这个字符就给你个乱码
//你用乱码来解密,解出来也是乱码
for(int bpos=0;bpos<bsize;bpos++)
{
cstr_buffer.Format(L"%02x",blockout[bpos]);
cstr_result.Append(cstr_buffer);
}
pos+=bsize;
}
       //免得内存泄露,清理一下
com_instr.Empty();
delete[] ptr_instr;
CComBSTR result;
bstr_t  bstr_result(cstr_result.LockBuffer()); 
result.Append(bstr_result.GetBSTR());
result.CopyTo(outstr);
cstr_result.UnlockBuffer();
result.Empty();
cstr_result.Empty();
cstr_buffer.Empty();

return S_OK;
}



//解密代码
STDMETHODIMP CMAddr::De(BSTR instr, BSTR* outstr)
{
CComBSTR com_instr(instr);
if(com_instr.Length()==0){
com_instr.Empty();
return S_OK;
}
int pos=0;//char pos
const int bsize=DES::BLOCKSIZE;//block size
int blockpos=0;// block pos
int charpos=0;//char pos

DESDecryption decryption_DES;
        //设置密钥
unsigned char key[ DES::KEYLENGTH ] = "xugangf";
decryption_DES.SetKey(key, DES::KEYLENGTH);


byte blockin[bsize];
byte blockout[bsize];


int nwLen=0;
 //将传进来的16进制代码转多字节,BSTR 进来自动是宽字节的
nwLen=WideCharToMultiByte(CP_ACP,NULL,com_instr.m_str,-1,NULL,0,NULL,NULL);
char* ptr_instr=new char[nwLen+bsize+1];
if(!ptr_instr)
{
delete[] ptr_instr;
return FALSE;
}
WideCharToMultiByte(CP_ACP,NULL,com_instr.m_str,-1,ptr_instr,nwLen,NULL,FALSE);

char tempbuf[4];
while(charpos<nwLen)
{


ZeroMemory(blockin,bsize);
ZeroMemory(blockout,bsize);
  //两个字符合成一个16进制的unsigned char
for( blockpos=0;blockpos<DES::BLOCKSIZE;blockpos++,charpos+=2)
{
tempbuf[0]=ptr_instr[charpos];
tempbuf[1]=ptr_instr[charpos+1];
tempbuf[2]=0;
blockin[blockpos]= (unsigned char) strtol(tempbuf, (char**)NULL, 16);
}
decryption_DES.ProcessBlock(blockin, blockout);
  //将解密出的字符串转到ptr_instr
memcpy_s(ptr_instr+pos,bsize,blockout,bsize);
pos+=bsize;
}

        //多字节转宽字节
nwLen = MultiByteToWideChar (CP_ACP, 0, ptr_instr, -1, NULL, 0);
wchar_t *ptr_winstr = new wchar_t[nwLen+bsize+1];
if(!ptr_winstr)
{
delete[] ptr_winstr;
return FALSE;
}
MultiByteToWideChar (CP_ACP, 0,ptr_instr, -1, ptr_winstr , nwLen);

com_instr.Empty();
delete[] ptr_instr;
CComBSTR result(ptr_winstr);
 //写结果
result.CopyTo(outstr);
result.Empty();
delete[] ptr_winstr;
return S_OK;
}


C++ MFC 标准库 加密解密解惑 如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏。 阅读详情

相关推荐

C++实现DES加密解密库:数据安全的基石

在信息安全领域,数据加密技术是保障数据传输安全和存储安全的基础。DES(Data Encryption Standard)算法,作为早期广泛使用的对称加密技术之一,它将明文数据通过特定的算法转换成密文,以防止未授权访问。本章将介绍DES的基本原理,包括其加密解密过程、子密钥的生成方式、以及如何在密钥扩展、初始置换、和最终置换等环节保证加密的强度。通过深入分析这些关键组成部分,我们可以对DES的工作流程有一个全面的认识。

weixin_35794316的博客 647

c++ DES ECB加密算法pkcs5padding填充实现

我主要的实现的pkcs5padding填充,其他填充方式自己实现就好了,都不难。 使用的是静态连接的方法,使用的是openssl的libcrypto库,网上一大堆,这里就不贴了。 windows库:https://download.youkuaiyun.com/download/suhiymof/11247287 头文件这样包含即可: #ifdef WIN32 #include "des.h" #p...

suhiymof的专栏 6380

Crypto++ DES和RSA算法的简单小demo

Crypto++是开源的C++数据加密算法库,支持如下算法:RSA、MD5、DES、AES、SHA-256等等。对于加密有对称加密和非对称加密。 使用Crypto++编译完成的库可在http://download.youkuaiyun.com/detail/wangweitingaabbcc/6217723下载,包含测试用例。

C/C++ 使用 cryptopp 加密解密

Crypto++(也称为CryptoPP)是一个流行的开源密码学库,提供了各种密码学算法的实现。它是用C++编写的,并在许可证允许的范围内可自由使用和修改。 Crypto++支持多种密码学算法,包括对称加密算法(如AES、DES、RC4)、哈希函数(如SHA-1、SHA-256)、消息认证码(如HMAC)、公钥加密算法(如RSA、DSA、ECC)以及其他密码学功能。

微软技术分享 1万+

Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)

先把这连个都添加到场景中,然后把kinect的depth相机拖到vision sensor中,把kinect的script也拖到vision sensor中,同时要注意修改深度相机的坐标,及修改script,删掉/rgb部分。由于需要导入到仿真场景中PDF文件不能直接导入,所以需要生成图下文件,使用windows自带的画图工具,生成以厘米为单位的图像格式,大小和标定板的设置大小一直。可以生成需要用的标定板的文件,设置标定板的大小,棋盘格的大小,等相关的参数,之后可以保存PDF文件。设置plane的大小。

hong3731的专栏 1753

智能安防摄像头埋点实践:用户行为与设备状态的闭环监控(含AI事件)

智能安防摄像头埋点闭环体系设计及应用实践 摘要: 本文系统阐述了智能安防摄像头埋点闭环体系的设计与实践。首先分析了传统埋点的不足及闭环埋点的价值,提出由用户行为埋点、设备状态埋点和AI事件埋点构成的三维埋点体系框架。详细介绍了闭环监控的四大流程:数据采集、汇聚清洗、分析建模和智能决策。通过误报优化、个性化策略等案例展示了AI事件闭环的实际应用价值,并探讨了隐私合规、性能优化等关键挑战的解决思路。最后展望了端侧AI增强、预测型埋点等未来发展趋势。该体系实现了从数据采集到业务决策的完整闭环,有效提升了AI模型性

专注智能硬件软硬件产品经理成长与实战,分享从需求定义到量产落地的真实日记。涵盖IoT趋势洞察、研发协作经验、产品方法论与工具箱,用轻松有趣的“汪式”视角,陪伴产品经理成长、避坑与升级。 1046

C++使用CryptoPP密码库之AES加密算法进行文件加密

CryptoPP 是一个开源的密码学加密库,提供了大量的密码学算法和功能,包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。这里重点介绍一下对称加密算法(AES)的使用和注意事项。

weixin_66143829的博客 2696

ZLMediaKit源码分析(二)推流创建

ZLMediaKit推流结构体创建是在RtspSession::onRecv()之后。如何触发onRecv()请参考上一篇文章这里不在赘述。

cliffordl的专栏 5068

crypto++的des使用方法

#include #include #include // keyString 是一个密钥,必须保证长度要超过 16 // block 是要处理的数据,处理后的数据也同时存放在 block 里,必须保证它的长度为 8 的整倍数 // length 是 block 的长度,必须保证它为 8 的整倍数 // direction 是表示是否是加密还是解密,若是加密,则用 CryptoP

5198

H3C设备VRF配置实战:5步搞定多业务网络隔离(附排错技巧)

本文详细介绍了在H3C设备上配置VRF(虚拟路由转发)实现多业务网络隔离的实战方法。通过五步配置流程,从创建VPN-instance、绑定接口到配置独立路由表,帮助网络工程师在单台设备上构建逻辑隔离的企业级网络,并分享了高级路由配置与常见排错技巧。

gold8的专栏 936

超声波传感器(CH101&ch201) - Ⅰ

压电微机械超声换能器(PMUT)和超声波信号处理的可编程片上系统(SoC)集成在一起的传感器

nicole088的专栏 2795

(全网最详细攻略)【Crypto++】在Visual studio2022中运行Cryptopp

Cryptopp是什么?如何下载Cryptopp?如何在VS中使用Crypto++?关于VS中多个源文件如何分开运行的解决方法VS2019下Crypto++安装与调用Crypto++的安装及使用Crypto++安装和简单使用RSA加密解密。

JingYan_Chan的博客 1万+

基于YOLOv13+CBAM注意力机制

本教程详细介绍了CBAM注意力机制的原理及其在YOLOv13中的集成方法。CBAM通过通道注意力和空间注意力两个模块,动态调整特征权重以增强模型性能。通道模块利用池化操作和共享MLP生成通道权重,空间模块则通过池化和卷积生成空间权重。教程提供了在YOLOv13中实现CBAM的具体步骤,包括模块代码定义、模型配置修改等关键环节,帮助开发者在目标检测任务中提升模型表现。

FJN110的博客 305

cryptopp des加密文件_C++ DES 加密(Cryptopp ) | 学步园

转载注明出处http://blog.youkuaiyun.com/xugangjava写了一个DES加密的插件,用的是crypto++库,各种字符的转换有点晕插件是ATL的Activex 只贴出关键代码,希望对你有用,如有不足欢迎指出。//加密代码STDMETHODIMP CMAddr::En(BSTR instr, BSTR* outstr){CComBSTR com_instr(instr);if(com...

weixin_39609166的博客 517

开源项目evo2安装教程

Evo 2 是一种先进的 DNA 语言模型,用于长上下文建模和设计。Evo 2 使用 StripedHyena 2 架构在单核苷酸分辨率下对 DNA 序列进行建模,上下文长度可达 100 万碱基对。Evo 2 使用 Savanna 进行预训练,并在 OpenGenome2 数据集上进行自回归训练,该数据集包含来自所有生命领域的 8.8 万亿个标记。

猿小白的博客 926

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

【推荐系统】推荐算法:冷启动-召回-粗排-精排-重排 解读

Danger的博客 3760

鸿蒙Des 加密解密 C++版本

本文介绍了在鸿蒙系统中使用C++实现DES加密解密的方案。由于鸿蒙API20(2025年10月发布)才内置DES算法,当前需通过C++实现。文章详细说明了如何基于开源库cryptopp进行开发:首先下载并编译cryptopp库,配置鸿蒙SDK环境;然后在项目中创建cpp目录结构,通过CMakeLists.txt引入cryptopp库;最后展示了napi_init.cpp的核心解密代码实现,包括hex解码、随机字符串生成和DES解密功能。该方案将加密算法打包成so库,为鸿蒙应用提供加密能力。

xo19882011的专栏 1382

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

CryptoPP DES 加解密

DesUtil.h [cpp] view plaincopy #ifndef DESUTIL_H_   #define DESUTIL_H_      #include       class DesUtil {   private:       const char *keystr;       void Base64en(const 

qq476907900的专栏 1813

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Crypto++学习总结---DES

DES 使用方法: #include #include #pragma comment( lib, "cryptlibD.lib" ) using namespace std; using namespace CryptoPP; int main( void ) { //主要是打印一些基本信息,方便调试: cout << "DES Parameters: " << endl; c

王伟挺的专栏 5915

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用CryptoPP实现DES加密

DesUtil.h#ifndef DESUTIL_H_ #define DESUTIL_H_ #include class DesUtil { private: const char *keystr; void Base64en(const unsigned char *ming, unsigned char* enstr); void Base64de(const unsigned

5804

Crypto++(CryptoPP)库初始化以及使用注意事项

开篇提示:本文为本人原创,本文欢迎转载,但必须注明本文出处,例如。 “该文引用自 CruiseYoung的:Visual Studio 2013编译libiconv-1.14 http://blog.youkuaiyun.com/fksec/article/details/40378469”否则说明阁下愿意支付以100元人民币每字计的稿费,敬请留意。

CruiseYoung的专栏 1万+

AES算法介绍

引用WikiPedia上对于AES加密算法的介绍,内容如下:高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,AES已然成为对称密钥加密。

liitdar的博客 4406

cryptopp des加密文件_使用CryptoPP实现DES加密

DesUtil.h#ifndef DESUTIL_H_#define DESUTIL_H_#include class DesUtil {private:const char *keystr;void Base64en(const unsigned char *ming, unsigned char* enstr);void Base64de(const unsigned char* mi, un...

weixin_39783426的博客 505

cryptopp des加密文件_CryptoJS DES加密

Testing websocketsvar key = 'BOTWAVEE';//CBC模式加密function encryptByDESModeCBC(message) {var keyHex = CryptoJS.enc.Utf8.parse(key);var ivHex = CryptoJS.enc.Utf8.parse(key);encrypted = CryptoJS.DES.encry...

weixin_39822147的博客 244

C++ 通过CryptoPP计算Hash值

Crypto++ (CryptoPP) 是一个用于密码学和加密的 C++ 库。它是一个开源项目,提供了大量的密码学算法和功能,包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto++ 的目标是提供高性能和可靠的密码学工具,以满足软件开发中对安全性的需求。 该库包含了许多常见的密码学算法,如AES、DES、RSA、DSA、SHA等,使开发者能够轻松地在他们的应用程序中实现安全性和加密功能。Crypto++ 是以面向对象的方式设计的,因此它的使用通常涉及使用类和对象来表示不同的

微软技术分享 1万+

UE4.26调用CryptoPP8.6库实现加密解密

文章目录前言一、环境二、使用步骤1.下载Crypto++ 8.6并打开2.编译cryptlib3.为项目拷贝必要文件4.将库引入到项目中5.创建UE4接口文件6.蓝图调用三、总结 前言 在UE4项目中用到CryptoPP库进行加密解密,但UE4内置CryptoPP库只有Crypto++5.65、Crypto++5.62两个版本,使用过程中会出现好多漏洞,这在新版本已经修复,所以只能升级到最新版Crypto++8.6,本文主要使用Crypto++8.6编译的lib库,在unreal中调用使用。 一、环境.

weixin_43923422的博客 3081
上一篇: Hook SHFileOperation实现文件监控
下一篇: Django多对多关系
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值