在项目中使用了RC4解密,为了解密我生成了和加密端一样的key,但是解密时老是不成功,直接使用简单的代码进行测试就成功了。细查原因,项目中的加解密调用不对称,加密方在生成key之后使用key做了一次加密测试,而解密方没有,查阅资料得:RC4 为流方式加密,加密解密需要同步。也就是说,用相同的密码将key1和key2初始化后,用key1加密一个分组,用key2解密这个分组。用key1加密的第i个分组,只能用key2的第i次来解密。而我的代码相当于用第i步加密,而用第i+1步解密,因此解不出明文,所以不能得到正确的明文,问题解决之。
并且加密和解密处理的字节数要相同,否则会导致解密失败。
unsigned char key_data_ptr[8]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}; RC4_KEY *key1 = new RC4_KEY; RC4_KEY *key2 = new RC4_KEY; RC4_set_key(key1,sizeof(key_data_ptr),&(key_data_ptr[0])); RC4_set_key(key2,sizeof(key_data_ptr),&(key_data_ptr[0])); unsigned char sourcedata[]={0x01 ,0x01 ,0x01 ,0x01 ,0x01 ,0x01 ,0x01 ,0x01}; unsigned char outBuffer[1024]; unsigned char tempBuffer[1024]; memset(outBuffer,0x00,sizeof(outBuffer)); memset(tempBuffer,0x00,sizeof(tempBuffer)); RC4(key1,sizeof(sourcedata),&(sourcedata[0]),&(outBuffer[0])); RC4(key2,sizeof(sourcedata),&(outBuffer[0]),&(tempBuffer[0])); LogHex((char*)&(outBuffer[0]), 8); LogHex((char*)&(tempBuffer[0]), 8);
附RC4介绍http://baike.baidu.com/view/904005.htm?fr=ala0,说实话,这介绍我看不懂。