3次DES 加密*OutIn 字符少时是正确的,当如下面字符多时就不正确了。
OutBuf的值很少,请问应如何调用DES加密? 
//加密
CString YiYuan::JiaMi(CString strIntPut, CString strkKey)
{
CString strReturn =_T("");
char *key ='1234'; 
char *OutBuf = new char[3000];
char *OutIn ="INSERT INTO SKMX (YYBH,BH,XH,BZ,LB,FBSK,JE,BMMC,CZY,ZYH,BHXG) VALUES ('1','20090409080113',0,'收入','门诊收费','现金',    1.00,'010','ADMIN','0000000001','20090409080111')^INSERT INTO SFMZ (YYBH,BH,BHMZ,MC,XB,NL,MCYS,MCBM,CZY,BZ,JE,JESS,BHCF,WC,RQ) VALUES ('1','20090409080111','0000000001','','无','','','','ADMIN','收入',1.0,1.0,'','完成', SYSDATE  )^INSERT INTO SFMZMX (YYBH,BH,XH,BHYP,MC,DW,GG,JG,SL,JE,BMMC,LBYP,HSL) VALUES ('1','20090409080111',0,'000002','1','1','1',1.0000,1,1.0000,'','收费项目',1)^update mzGh set bzsf='1' where bhmz='0000000001' and  YYBH='1'^" ;
Des_Encode(OutBuf,OutIn,key);
strReturn= OutBuf ;
delete [] OutBuf ;OutBuf = NULL;
delete [] OutIn ;OutIn= NULL;
return strReturn ;
}//用DES算法码加密 buf多占1/3的存储空间,请保证pBase64有足够的空间
int rr::Des_Encode(  char *outPut, char *  inPut, char *  key)
{
long keylen;
keylen =strlen(key);
long datalen ;
datalen=strlen(inPut);
 char* bufOutBase642=new char[  datalen* 2 + 4];
Des_Go(bufOutBase642,inPut,datalen , key,keylen, ENCRYPT);
Base64Encode(outPut,bufOutBase642);
delete [] bufOutBase642;
return 0 ;
}

解决方案 »

  1.   

    我建议所用的空间在加密内部生成,根据具体情况,计算一下长度,然后new出来,用完后,外部删除!
      

  2.   

    怪了,同样的 一样多的字符 str1 等于上面的数字就能正常加密,下面的就不能,为什么呢, 
    str1 =  _T("http://localhost/Service。。 时加密的字符少多了。
    str1 =  _T("12345678901234567890123456789012345678901234567890123456789012345678901234567890!12345678901234567890123456789012345678901234567890123456789012345678901234567890yby12345678901234567890123456789012345678901234567890123456789012345678901234567890!12345678901234567890123456789012345678901234567890123456789012345678901234567890");

     str1 =  _T("http://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp:/");
     
     str1 = ge->y.JiaMi(str1,1234) ;
     str2 = ge->y.JieMi(str1,1234) ;
      

  3.   

    不要用字符串操作,字符串以\0作为结束标记,如果数据中有0就会自动截断,改成用BYTE型数组。
      

  4.   

    一般加密都用BYTE等数组来防止字符串结束操作等...
      

  5.   

    可是我这里没有结束符呀?
    str1 =  _T("http://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp://localhost/Service.asmxhttp:/"); //用DES算法码加密 buf多占1/3的存储空间,请保证pBase64有足够的空间  ((datalen+7)/8)*8
    int YiYuan::Des_Encode(  char *outPut, char *  inPut, char *  key)
    {
    long keylen;
    keylen =strlen(key);
    long datalen ;
    datalen=strlen(inPut);
    long lNewOutCharLen = ((datalen+7)/8)*8 ;
    char* bufOutBase642=new char[lNewOutCharLen] ; 
    //我调试到下面的语句,inPut是对的, bufOutBase642出来就是不够长度的加密后的串,为什么呢?inPut没有结束符和其它字符呀。
    //这里已经不是字符串了而是放到了 char* 里 如果像大家说的放到BYTE里,该怎么实现呢?
    Des_Go(bufOutBase642,inPut,lNewOutCharLen   , key,keylen, ENCRYPT);
    Base64Encode(outPut,bufOutBase642);
    delete [] bufOutBase642;
    return 0 ;
    }
      

  6.   

    des算法是每8个字节为一组加密的,如果长度不是8的整数倍,需要将尾部数据进行填充,按需要填充成0或其他值都可以。我看你调用des的时候,输入数据的长度不是8的倍数,只是结果缓冲是8的倍数。
      

  7.   

    加密算法还是用纯c的好,速度又快,调用接口也清晰;libtomcrypt很好,csdn里就有我这里就用它做了个调用,AES加密8MB的文件只要0.078s,des稍慢
      

  8.   

    加密算法还是用纯c的好,速度又快,调用接口也清晰;libtomcrypt很好,csdn里就有我这里就用它做了个调用,AES加密8MB的文件只要0.078s,des稍慢
      

  9.   

    你先弄比较简单的,比如用密钥 0x11,22,33,44,55,66,77,88来加密 "this is a simple string",ecb方式加密的结果应该是。
    //
    DES ECB加密
    //
    KEY值为:11 22 33 44 55 66 77 88 
    //
    数据为:
    74 68 69 73 20 69 73 20 61 20 73 69 6D 70 6C 65 20 73 74 72 69 6E 67 00 
    //
    加密过程为:
    //--
    数据为:74 68 69 73 20 69 73 20   结果为:9F A9 F2 CC 16 2B 28 F3 
    //--
    数据为:61 20 73 69 6D 70 6C 65   结果为:0A 4D 87 A0 A2 80 E4 91 
    //--
    数据为:20 73 74 72 69 6E 67 00   结果为:86 DE C7 C8 B6 35 16 51 
    //
    结果为:
    9F A9 F2 CC 16 2B 28 F3 0A 4D 87 A0 A2 80 E4 91 86 DE C7 C8 B6 35 16 51 
      

  10.   

    如果你调试的des运算结果也是这样,那么des功能完全正确了。然后再是base64