vc简单加密字符串
来源:互联网 发布:wifi万能钥匙软件下载 编辑:程序博客网 时间:2024/05/17 09:19
(1)//如下,字符串加密
inline void SimpleEcryptXOR2(char *value, char cBgnInit, char cEndInit)
{
int len=int(strlen(value));
for(int iRight=0;iRight<len-1;iRight++)
{
if(value[iRight]!=value[iRight+1]) //防止出现空字符
value[iRight]^=value[iRight+1];
}
if(value[len-1]!=cEndInit)value[len-1]^=cEndInit; //如无if,当字串结尾出现与cEndInit相同的字符时,则解密时会形成
乱码
for(int iLeft=len-1;iLeft>0;iLeft--) //对未加密到的部分加密,对加密到的部分再加密
{
if(value[iLeft]!=value[iLeft-1])
value[iLeft]^=value[iLeft-1];
}
if(value[0]!=cBgnInit)value[0]^=cBgnInit; //如无if,当字串开头连续出现两个与cBgnInit相同的字符时,会形成空串
}
//字符串解密
inline void SimpleDecryptXOR2(char *value, char cBgnInit, char cEndInit)
{
int len=int(strlen(value));
if(len>0)
{
if(value[0]!=cBgnInit)value[0]^=cBgnInit;
for(int iRight=0;iRight<len-1;iRight++)
{
if(value[iRight]!=value[iRight+1])
value[iRight+1]^=value[iRight];
}
if(value[len-1]!=cEndInit)value[len-1]^=cEndInit;
for(int iLeft=len-1;iLeft>0;iLeft--)
{
if(value[iLeft]!=value[iLeft-1])
value[iLeft-1]^=value[iLeft];
}
}
}
(2)//对字符串需要注意结束符,不太适用字符串
char strKey[] = {0x03,0x25, 0x45, 0x5F, 0xFA};//你的密钥,长度随你定了
CString szData("你的要加密的数据");
char *pData = szData.GetBuffer(0);
char *p = new char[szData.GetLength()];
int nKeyLen = sizeof(strKey);
for(int i=0; i<szData.GetLength(); i++)
{
*pData = *pData ^ strKey[i%nKeyLen];//每字节与对应的密钥字节进行异或运算
pData++;
}
(3)//此加密方法,采用了变长加宽的办法,可以保证生成的字串在某些编码下合法有效
//映射
unsigned char t; //随机映射到ascii码表
char tCh1,tCh2;
for(int i=0 ;i<len;i++)
{
t=in[i];
if(t<32) //0-31 32个字符
{
tCh1=32+rand()%24;
tCh2=t+(tCh1-32)*4+3;
}
else if(t<127) //31-126 //95个字符
{
tCh1=56+rand()%24;
tCh2=t;
}
else if(t<160) //127-159 //33个字符
{
tCh1=80+rand()%24;
tCh2=t-(tCh1-78)*4-3;
}
else //160-255 //95个字符
{
tCh1=104+rand()%23;
tCh2=t-128;
}
out+=tCh1;
out+=tCh2;
}
//逆映射
char tCh1,tCh2;
unsigned char t;
for(int i=0 ;i<len;i+=2)
{
tCh1=in[i];
tCh2=in[i+1];
if(tCh1<56)t=tCh2-(tCh1-32)*4-3;
else if(tCh1<80)t=tCh2;
else if(tCh1<104)t=tCh2+(tCh1-78)*4+3;
else t=tCh2+128;
out+=t;
}
//与第一种加密方法组合
using namespace std;
inline void SimpleEcryptXOR2(char *in, CString& out,char cBgnInit, char cEndInit)
{
int len=int(strlen(in));
if(len)
{
for(int iRight=0;iRight<len-1;iRight++)
{
if(in[iRight]!=in[iRight+1])
in[iRight]^=in[iRight+1];
}
if(in[len-1]!=cEndInit)in[len-1]^=cEndInit;
for(int iLeft=len-1;iLeft>0;iLeft--)
{
if(in[iLeft]!=in[iLeft-1])
in[iLeft]^=in[iLeft-1];
}
if(in[0]!=cBgnInit)in[0]^=cBgnInit;
unsigned char t; //随机映射到ascii码表
char tCh1,tCh2;
for(int i=0 ;i<len;i++)
{
t=in[i];
if(t<32) //0-31 32个字符
{
tCh1=32+rand()%24;
tCh2=t+(tCh1-32)*4+3;
}
else if(t<127) //31-126 //95个字符
{
tCh1=56+rand()%24;
tCh2=t;
}
else if(t<160) //127-159 //33个字符
{
tCh1=80+rand()%24;
tCh2=t-(tCh1-78)*4-3;
}
else //160-255 //95个字符
{
tCh1=104+rand()%23;
tCh2=t-128;
}
out+=tCh1;
out+=tCh2;
}
}
}
inline void SimpleDecryptXOR2(char *in, CString& out,char cBgnInit, char cEndInit)
{
int len=int(strlen(in));
if(len>0)
{
char tCh1,tCh2;
unsigned char t;
for(int i=0 ;i<len;i+=2)
{
tCh1=in[i];
tCh2=in[i+1];
if(tCh1<56)t=tCh2-(tCh1-32)*4-3;
else if(tCh1<80)t=tCh2;
else if(tCh1<104)t=tCh2+(tCh1-78)*4+3;
else t=tCh2+128;
out+=t;
}
char* value=out.GetBuffer(0);
len=int(strlen(value));
if(len>0)
{
if(value[0]!=cBgnInit)value[0]^=cBgnInit;
for(int iRight=0;iRight<len-1;iRight++)
{
if(value[iRight]!=value[iRight+1])
value[iRight+1]^=value[iRight];
}
if(value[len-1]!=cEndInit)value[len-1]^=cEndInit;
for(int iLeft=len-1;iLeft>0;iLeft--)
{
if(value[iLeft]!=value[iLeft-1])
value[iLeft-1]^=value[iLeft];
}
}
}
}
- vc简单加密字符串
- 加密解密字符串vc
- 字符串简单加密
- c++字符串简单加密
- 简单加密字符串
- 简单字符串加密工具
- js 简单加密字符串方式
- 简单实现MD5加密字符串
- c++字符串简单加密解密
- 简单的MD5加密字符串
- 简单的js字符串加密
- VC + ADO + Access数据文件简单加密方法
- vc++简单实现 分割字符串!
- 简单的数组操作字符串,加密可用
- 用Java实现的字符串简单加密
- 简单的Delphi字符串加密解密函数
- Delphi经典实例9------字符串简单加密
- 简单的Delphi字符串加密解密函数
- 还不能成功,暂还不知道为什么会这样错的。
- HTTP请求方式
- HTTP请求流程
- 今晚试验了好久,略有小成,可是还是不够理想。。没把数据库中的具体内容显示出来,只有那个表头。
- 关于头文件 2410Init.s的详细注释分析
- vc简单加密字符串
- c++
- poj2505解题报告
- Windows 7 Coruier New 字体设置
- java
- IE编程转载
- 从J2EE转向Android的第一天
- 电脑城里面都是奸商啊,再也不去了
- C# 网页截图