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 ;
}
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) ;
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 ;
}
//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