constexpr 进行编译期间的字符串加密
来源:互联网 发布:王者荣耀刷金币软件 编辑:程序博客网 时间:2024/05/22 15:49
constexpr 是C++11新的概念,一个constexpr 函数可以返回一个const 量,当传递的参数都是const 型的时候
根据这个特性,我们对代码中硬编码的字符串进行加密就可以防止被一些人轻易逆向识破或修改
代码大致如下
(1)转换后的也应该放到全局的buffer
//enc_string_buffer 模板可以定制各种长度的字符串缓冲区template< typename chType, int StrLen>struct enc_string_buffer{chType pdata[StrLen + 1] = {};int cchLen = StrLen;operator chType*() const{return (chType*)(&pdata[0]);}};//const_str_len 返回常量字符串的长度template<typename chType>constexpr int const_str_len(const chType* pString){int Len = 0;while (*pString){Len++;pString++;}return Len;}//算术符--异或template<typename chType>constexpr chType enc_xor(const chType ch, const chType key){return ch ^ key;}
//constEncode_StringBuf创建一个加密的缓冲区template<typename chType, int StrLen, typename fnChEncOp>constexpr enc_string_buffer<chType, StrLen> constEncode_StringBuf(const chType* pString, const chType* pKey, const int KeyLen, fnChEncOp chencodeFunc){enc_string_buffer<chType, StrLen> ret;int len = const_str_len(pString);if (len > StrLen - 1)len = StrLen - 1;for (int xx = 0; xx < len; xx++)ret.pdata[xx] = chencodeFunc(pString[xx], pKey[xx % KeyLen]);return ret;}
typedef char(*pfn_enc_func_type)(const char ch, const char key);typedef wchar_t(*pfn_enc_func_typeW)(const wchar_t ch, const wchar_t key);#define DEC_ENC_STR_XORA(NAME,TEXT,KEY,KEYLEN)\constexpr enc_string_buffer<char,sizeof((TEXT))> NAME=constEncode_StringBuf<char,sizeof((TEXT)),pfn_enc_func_type>((TEXT),(KEY),(KEYLEN),enc_xor<char>)#define DEC_ENC_STR_XORW(NAME,TEXT,KEY,KEYLEN)\constexpr enc_string_buffer<wchar_t ,sizeof((TEXT))/sizeof(wchar_t)> NAME=constEncode_StringBuf<wchar_t ,sizeof((TEXT))/sizeof(wchar_t),pfn_enc_func_typeW>((TEXT),(KEY),(KEYLEN),enc_xor<wchar_t>)
(2)利用宏定义一个加密缓冲区
DEC_ENC_STR_XORA (g_kill1, "Kill1", "Hello", 5);
则全局将存在一个加密的缓冲区,这个缓冲区将在编译前计算好
(3)注意宏中的是constexpr
(4)constexpr函数请放到头文件中,其在release版本下不存在代码
阅读全文
0 0
- constexpr 进行编译期间的字符串加密
- 模板元编程-编译期间加密
- web.config的数据库连接字符串进行加密
- 如何编译期间用ant进行debug
- 使用Md5 的加密方式 ,对字符串进行加密
- C#进行字符串加密
- constexpr的使用
- 对字符串进行加密作业
- 字符串进行加密与解密。
- 将字符串进行sha1加密
- 对字符串进行MD5加密
- 对输入的字符串进行RSA加密和解密处理
- 对web.config的数据库连接字符串进行加密
- 对字符串进行简单的加密和解密处理
- PHP对escape的字符串进行解密 、加密
- 使用JDK提供的MD5算法对字符串进行加密
- 根据文本对输入的字符串进行加密解密操作
- Java对字符串进行加密解密的工具类
- java简介
- 如何在几秒中之内给接近百万个10位数排序
- 等价表达式
- Oracle中默认的用户名和密码
- CreateProcess运行后的状态确定
- constexpr 进行编译期间的字符串加密
- Python3 操作符重载方法
- 享元模式(FLYWEIGHT)
- Memcached源码分析之资源分享
- torch/nn目录结构以及__init__.py
- Web开发安全问题简单汇总
- 机器学习福利
- PHP学习笔记——冒泡(起泡)排序算法
- 莫比乌斯反演与容斥原理