使用Crypto++实现3DES ECB EDE2加密及POS MAC算法

编程入门 行业动态 更新时间:2024-10-05 03:28:43

使用Crypto++实现3DES ECB EDE2加密及POS MAC<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法"/>

使用Crypto++实现3DES ECB EDE2加密及POS MAC算法

注意编译需要引用Crypto++的静态库


引入头文件:

#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include "default.h" 
#include "modes.h"
#include "cryptlib.h"
#include "filters.h"
#include "hex.h"
#include "bench.h"
#include "osrng.h"
#include "md5.h"
#include "cmac.h"
#include "ttmac.h"
#include "vmac.h"
#include "hmac.h"
#include "cbcmac.h"
#include "dmac.h"
#include "files.h"
using namespace std;
using namespace CryptoPP;

封装的DES_EDE2函数:


bool DES_EDE2(bool enc, const char* keystr, int datalen, char* data, char **encdata){// 得到密钥StringSource sskey(keystr, true, new HexDecoder);SecByteBlock key((size_t)sskey.MaxRetrievable());sskey.Get(key, key.size());//ECB_Mode<CryptoPP::DES_EDE2>::Encryption DES_ECB_ENC;ECB_Mode<CryptoPP::DES_EDE2>::Decryption DES_ECB_DEC;DES_ECB_ENC.SetKey(key, key.size());DES_ECB_DEC.SetKey(key, key.size());//*encdata = new char[datalen];memset(*encdata, 0, 8);//if (enc) DES_ECB_ENC.ProcessData((byte*)*encdata, (byte*)data, datalen);else DES_ECB_DEC.ProcessData((byte*)*encdata, (byte*)data, datalen);//return true;}


封装的POS MAC算法:

	// POS 终端MAC算法bool POS_MAC(const char* keystr, const char* data, UINT datalen, byte *encdata){char* src;// 数据补位int mod = datalen % 8;UINT len = datalen;if (mod) len= datalen + 8 - mod;src = new char[len];memcpy(src, data, datalen);if(datalen!=len) memset(src + datalen, 0, len - datalen);// 每8字节进行XOR操作UINT g = len >> 3; // 得到分组数char BLOCK[8];memcpy(BLOCK, src, 8);UINT i, j;for (i = 1; i < g; i++){for (j = 0; j < 8; j++){BLOCK[j] = BLOCK[j] ^ *(src + j+ i * 8);}}//		char HI[8], LO[8];string BLOCKHEX=HexFromBytes((byte*)BLOCK, 8);memcpy(HI, BLOCKHEX.c_str(), 8);memcpy(LO, BLOCKHEX.c_str()+8, 8);// 前8字节加密char *desdata=NULL;DES_EDE2(true, keystr, 8, HI, &desdata);// 加密结果与后8字节XORfor (j = 0; j < 8; j++) LO[j] = LO[j] ^*(desdata + j);// 再次加密DES_EDE2(true, keystr, 8, LO, &desdata);// 结果转字符串BLOCKHEX = HexFromBytes((byte*)desdata, 8);//memcpy(encdata, BLOCKHEX.c_str(), 8);//delete[] src;return true;}
}


更多推荐

使用Crypto++实现3DES ECB EDE2加密及POS MAC算法

本文发布于:2024-02-28 12:05:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769505.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   ECB   DES   Crypto   MAC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!