这是基本的ENIGMA,加密解密是一个程序。
与传统的ENIGMA不同的是:
256个码点,而不是26个。适合字节流加密。
密钥是转轮的配线而不是起始位置。传统的配线固定,用起始位置作密钥。
每次不一定转1格。
【 在 ylh1969 的大作中提到: 】
: 其中的enigma.h:
: void enigma1(ENIGMA t,char *buf,int len);
: 这个是基本的加密解密程序。
: ...................
void enigma1(ENIGMA t,char *string,int len)
{
register char *p;
register int n1,n2, k, x; //x旋转因子
char *t1,*t2,*t3;
if(!t || !string || len <= 0) return;
t1=t[0];
t2=t[1];
t3=t[2];
//初始位置和旋转因子与len和T有关,不知道T就不知道它们,也无法通过明文、密文的关系推断T。
n2=t[len&1][(len>>9)&MASK]&MASK;
n1=t3[(len>>1)&MASK]&MASK;
x=((t3[((len>>17)+n1)&MASK]&3)<<1)+1; //x=1,3,5,7
p=string;
for(k=0;k<len;k++){
*p = t2[(t3[(t1[(*p+n1)&MASK]+n2)&MASK]-n2)&MASK]-n1;
++p;
n1 += x;
if (n1 >= ROTORSZ) {
n1 &= MASK;
if(++n2==ROTORSZ) n2 = 0;
}
}
}
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*