请大家帮我测试一下这个函数,其中pszPassword用“j312608"测试,看返回值是多少,请贴出返回值,谢谢!char * EncryptPassword(const char* pszPassword)
{
char sz[50] = {0};
char pszRet[50]={0}; sprintf(sz, "fetion.com.cn:%s", pszPassword);
char hashPWD[20] = {0};
CUtils::SHA(sz, hashPWD); for(int i=0; i<20; i++)
sprintf(pszRet, "%s%02X", pszRet, *(unsigned char*)&hashPWD[i]); return pszRet;
}
{
char sz[50] = {0};
char pszRet[50]={0}; sprintf(sz, "fetion.com.cn:%s", pszPassword);
char hashPWD[20] = {0};
CUtils::SHA(sz, hashPWD); for(int i=0; i<20; i++)
sprintf(pszRet, "%s%02X", pszRet, *(unsigned char*)&hashPWD[i]); return pszRet;
}
============
一个错误的函数,返回局部变量的指针,结果是不确实的,在某些情况下能正确工作,某些情况下不能正常工作。没有测试的价值。
{
char sz[50] = {0};
sprintf(sz, "fetion.com.cn:%s", pszPassword);
char hashPWD[20] = {0};
CUtils::SHA(sz, hashPWD); for(int i=0; i<20; i++)
sprintf(pszRet, "%s%02X", pszRet, *(unsigned char*)&hashPWD[i]); }
这一句怎么理解?是不是%s处取pszRet的值,%02x处取*(unsigned char*)&hashPWD[i]的值重新构成新的pszRet?作用是什么?
for(int i=0; i<20; i++)
sprintf(pszRet, "%s%02X", pszRet, *(unsigned char*)&hashPWD[i]);
%02x处取*(unsigned char*)&hashPWD[i]值的16进制表示,不足两位在前面补0
其中pszPassword是用“j312608"测试的不?
另外,下面的语句是不是将hashPWD变为16进制后存到pszRet中?
for(int i=0; i<20; i++)
sprintf(pszRet, "%s%02X", pszRet, *(unsigned char*)&hashPWD[i]);