- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2010-06-28 17:37 编辑
enigma1.c:
yulihua49 发表于 2010-06-28 17:25 ![]()
enigma2.c:- #include <strproc.h>
- #include "enigma.h"
- void b_revers(char *buf,int len)
- {
- char *p,*p1,c;
- if(!buf || len<2) return;
- p=buf;
- p1=p+len-1;
- while(p1>p) {
- c=*p1;
- *p1--=*p;
- *p++=c;
- }
- return;
- }
- void enigma_rev(ENIGMA ep,char *buf,int len)
- {
- int i;
- char *p;
- if(!buf||len<=0) return;
- frenz_encode(ep,buf,len);
- b_revers(buf,len);
- p=buf;
- for(i=0;i<len-1;i++) {
- p[1]^=*p;
- p++;
- }
- }
- void rev_enigma(ENIGMA ep,char *buf,int len)
- {
- int i;
- char *p;
- if(!buf||len<=0) return;
- b_revers(buf,len);
- p=buf;
- for(i=0;i<len-1;i++) {
- *p^=p[1];
- p++;
- }
- frenz_decode(ep,buf,len);
- }
- void enigma2_init(ENIGMA2 *ep,char *key)
- {
- int len;
- if(!ep||!key||!*key) return;
- len=strlen(key);
- char rk[len+1];
- strcpy(rk,key);
- enigma1_init(ep->t,key);
- b_revers(rk,len);
- enigma1_init(ep->r,rk);
- ep->crc=0X7FFFFFFF & ssh_crc32(ep->t,2*sizeof(ep->t));
- //ShowLog(5,"%s:crc=%d",__FUNCTION__,ep->crc);
- return;
- }
- static void str_rotor(char *str,int len,int rotor)
- {
- char *p;
- if(!rotor) return;
- char buf[rotor];//WINDOWS不能如此,改alloca
- memcpy(buf,str,rotor);
- memcpy(str,str+rotor,len-rotor);
- memcpy(str+len-rotor,buf,rotor);
- }
- void enigma2_encode(ENIGMA2 *ep,char *buf,int len)
- {
- char *p;
- if(!ep) return;
- enigma_rev(ep->t,buf,len);
- str_rotor(buf,len,ep->crc%len);
- enigma1(ep->r,buf,len);
- }
- void enigma2_decode(ENIGMA2 *ep,char *buf,int len)
- {
- int i;
- char *p;
- if(!ep) return;
- enigma1(ep->r,buf,len);
- i=ep->crc%len;
- if(i) str_rotor(buf,len,len-i);
- rev_enigma(ep->t,buf,len);
- }
复制代码 有些.h你没有就删掉,看看缺啥,给你补。缺少ShowLog,删掉吧,那只是个日志。你要下载整个SDBC就没问题了。 |
|