C++加密小程序遇到有关问题,求指教
C++加密小程序遇到问题,求指教
写了一个小程序,用来对字符串进行简单的加密,程序如下:
解密之后的字符串为空,求指教该怎么改进这个函数, 谢谢!
------解决思路----------------------
原因很简单,第一个字符加密时是A^A,结果就是0。再把一个以0开始的字符串赋给CString,CString遇到0就认为字符串结尾了,后面的加密后的字符串直接被忽略了。你可以看内存里面

还有一点就是,你这个代码明显有问题CString是双字节的UNICODE 编码,GetLength返回的是UNICODE字符数,实际的内存大小为其2倍。
------解决思路----------------------
字符串默认\0结尾,那么你就不要用字符串呗,用byte数组来。
写了一个小程序,用来对字符串进行简单的加密,程序如下:
CString CommandEncrypt(CString strCode)
{
char cKey[] = "AssetCentre";
int ilen= strlen(cKey);
LPCTSTR szSource = (LPCTSTR) strCode;
int iLength = strCode.GetLength();
char *szDes = new char[iLength + 1];
for(int i = 0;i < iLength;i++)
{
szDes[i] = szSource[i] ^cKey[i%ilen] ;
}
szDes[iLength] = '\0';
CString strTemp(szDes);
delete[] szDes;
delete[] cKey;
return strTemp;
}
void main()
{
CString strTemp=_T("ABCDEFGHIJKLMN");
CString strTemp1=CommandEncrypt(strTemp);
strTemp=CommandEncrypt(strTemp1);
}
解密之后的字符串为空,求指教该怎么改进这个函数, 谢谢!
------解决思路----------------------
原因很简单,第一个字符加密时是A^A,结果就是0。再把一个以0开始的字符串赋给CString,CString遇到0就认为字符串结尾了,后面的加密后的字符串直接被忽略了。你可以看内存里面
还有一点就是,你这个代码明显有问题CString是双字节的UNICODE 编码,GetLength返回的是UNICODE字符数,实际的内存大小为其2倍。
------解决思路----------------------
字符串默认\0结尾,那么你就不要用字符串呗,用byte数组来。