非常谢谢!
我要进行的操作过程是这样的:CString sTest="ABC";//明文
CString sKEY="ABC";// 密匙我的目的是将这两个串异或,由此将明文加密.
解密是将结果与密匙再进行一次异或.我知道CString是不能直接进行按位异或的,得先转化为BYTE类型.请问这个过程如何实现?特别感谢!
我要进行的操作过程是这样的:CString sTest="ABC";//明文
CString sKEY="ABC";// 密匙我的目的是将这两个串异或,由此将明文加密.
解密是将结果与密匙再进行一次异或.我知道CString是不能直接进行按位异或的,得先转化为BYTE类型.请问这个过程如何实现?特别感谢!
CString 重载了 operator [] ,sTest[i]就可以取得第i个字符。
char *buffer = new char[len+1] ;
buffer[len] = 0 ; ASSERT(len>=sKey.GetLength() ; // 密匙 的长度不要小于明文的长度for(int i=0 ; i<len ; i++)
{
buffer[i] = sTest[i] ^ sKey[i] ; // 异或
}
// 得到的 buffer 就是密文。
delete []buffer ;
是这样吗?
int index;
index=0;
for(int i=0;i<sTest.GetLength;i++)
{
sTest[i]=sTest[i]^sKEY[(index++)];
if(index=sKEY.GetLength)index=0;
}
自己很笨,这个问题弄了好几天!
希望能得到帮助.
EncryptPsw(const CString & sPsw, const CString & sKey, BYTE * pbEncryptedPsw, const int & nBuffLenEncryptedPsw)
{
ASSERT(pbEncryptedPsw);
ASSERT(sKey.GetLength() >= sPsw.GetLength());
ASSERT(sPsw.GetLength() <= nBuffLenEncryptedPsw);for (int i = 0; i < sPsw.GetLength(); i++)
{
pbEncryptedPsw[i] = sPsw[i] ^ sKey[i];
}
}
那buffer里的内容如何再变成字符串CString呢?
// 这个地方过不去,sTest[i] 好像只能读不能写。
2. sTest.GetLength 这个地方漏了括号,应该是 sTest.GetLength()3. if(index=sKey.GetLength)
判断等于要用 == ,不能用 =
char *buffer = new char[len+1] ;
buffer[len] = 0 ; int index = 0 ;
for(int i=0 ; i<len ; i++)
{
buffer[i] = sTest[i] ^ sKey[index++] ; // 异或
if( index == sKey.GetLength() ) index = 0 ;
}
// 得到的 buffer 就是密文。CString answer = buffer ; // 直接对 CString 赋值就行了。
delete []buffer ;
CString sTest="ABC";//明文
CString sKey="0";// 密匙
int len = sTest.GetLength() ;
char *buffer = new char[len+1] ;
buffer[len] = 0 ; int index = 0 ;
for(int i=0 ; i<len ; i++)
{
buffer[i] = sTest[i] ^ sKey[index++] ; // 异或
if( index == sKey.GetLength() ) index = 0 ;
}
// 得到的 buffer 就是密文。 CString answer = buffer ; // 直接对 CString 赋值就行了。
delete []buffer ;
AfxMessageBox(answer);
'0' = 0x41 ; // 01000001
'q' = 0x71 ; // 01110001
有问题么?
'0'是00H