加密代码就是解密代码,异或两次得到原值。
c语言
Const unsigned long M1 =A;
Const unsigned long IA1 =B;
Const unsigned long IC1 =C;
Void encrypt(
unsigned long key,
unsigned char* buffer,
unsigned short size )
{
unsigned short idx = 0;
if( key == 0 ) key = 1;
while( idx < size )
{
key = IA1 * ( key % M1 ) + IC1;
buffer[idx++] ^= (unsigned char)((key>>20)&0xFF);
}
}
java语言
public static byte[] encrypt(int M1,int IA1,int IC1,int key,byte [] data) {
if(data == null) return null;
byte[] array = data;//使用原对象,返回原对象
//byte[] array = new byte[data.length]; //数组复制 返回新的对象
//System.arraycopy(data, 0, array, 0, data.length);
int idx=0;
if(key==0){
key=1;
}
int mkey = M1;
if (0 == mkey )
{
mkey = 1;
}
while(idx<array.length){
key = IA1 * ( key % mkey ) + IC1;
array[idx]^=((key>>20)&0xFF);
idx++;
}
return array;
}