Всем спасибо за помощь..
Реализация алгоритма Skipjack, который превратит любую ценную информацию в мусор, а затем обратно (если конечно знаешь ключ).
10байтный ключ позволяет сгенерировать 1.20892581961462e+24 вариантов себя.
Код:
package main{
import flash.display.MovieClip
import flash.utils.ByteArray
public class base extends MovieClip{
public var ssecret:String='Секретный текст';
public var skey:String='very';
public var equ:Array = new Array(
0xA3, 0xD7, 0x09, 0x83, 0xF8, 0x48, 0xF6, 0xF4, 0xB3, 0x21, 0x15, 0x78, 0x99, 0xB1, 0xAF, 0xF9, 0xE7, 0x2D, 0x4D, 0x8A, 0xCE, 0x4C, 0xCA, 0x2E, 0x52, 0x95, 0xD9, 0x1E, 0x4E, 0x38, 0x44, 0x28, 0x0A, 0xDF, 0x02, 0xA0, 0x17, 0xF1, 0x60, 0x68, 0x12, 0xB7, 0x7A, 0xC3, 0xE9, 0xFA, 0x3D, 0x53, 0x96, 0x84, 0x6B, 0xBA, 0xF2, 0x63, 0x9A, 0x19, 0x7C, 0xAE, 0xE5, 0xF5, 0xF7, 0x16, 0x6A, 0xA2, 0x39, 0xB6, 0x7B, 0x0F, 0xC1, 0x93, 0x81, 0x1B, 0xEE, 0xB4, 0x1A, 0xEA, 0xD0, 0x91, 0x2F, 0xB8, 0x55, 0xB9, 0xDA, 0x85, 0x3F, 0x41, 0xBF, 0xE0, 0x5A, 0x58, 0x80, 0x5F, 0x66, 0x0B, 0xD8, 0x90, 0x35, 0xD5, 0xC0, 0xA7, 0x33, 0x06, 0x65, 0x69, 0x45, 0x00, 0x94, 0x56, 0x6D, 0x98, 0x9B, 0x76, 0x97, 0xFC, 0xB2, 0xC2, 0xB0, 0xFE, 0xDB, 0x20, 0xE1, 0xEB, 0xD6, 0xE4, 0xDD, 0x47, 0x4A, 0x1D, 0x42, 0xED, 0x9E, 0x6E, 0x49, 0x3C, 0xCD, 0x43, 0x27, 0xD2, 0x07, 0xD4, 0xDE, 0xC7, 0x67, 0x18, 0x89, 0xCB, 0x30, 0x1F, 0x8D, 0xC6, 0x8F, 0xAA, 0xC8, 0x74, 0xDC, 0xC9, 0x5D, 0x5C, 0x31, 0xA4, 0x70, 0x88, 0x61, 0x2C, 0x9F, 0x0D, 0x2B, 0x87, 0x50, 0x82, 0x54, 0x64, 0x26, 0x7D, 0x03, 0x40, 0x34, 0x4B, 0x1C, 0x73, 0xD1, 0xC4, 0xFD, 0x3B, 0xCC, 0xFB, 0x7F, 0xAB, 0xE6, 0x3E, 0x5B, 0xA5, 0xAD, 0x04, 0x23, 0x9C, 0x14, 0x51, 0x22, 0xF0, 0x29, 0x79, 0x71, 0x7E, 0xFF, 0x8C, 0x0E, 0xE2, 0x0C, 0xEF, 0xBC, 0x72, 0x75, 0x6F, 0x37, 0xA1, 0xEC, 0xD3, 0x8E, 0x62, 0x8B, 0x86, 0x10, 0xE8, 0x08, 0x77, 0x11, 0xBE, 0x92, 0x4F, 0x24, 0xC5, 0x32, 0x36, 0x9D, 0xCF, 0xF3, 0xA6, 0xBB, 0xAC, 0x5E, 0x6C, 0xA9, 0x13, 0x57, 0x25, 0xB5, 0xE3, 0xBD, 0xA8, 0x3A, 0x01, 0x05, 0x59, 0x2A, 0x46);
public function base():void{
//чтение ключа
var t:ByteArray = new ByteArray();
t.writeUTFBytes(skey);
var l:uint=t.length;
var z:int = 10 - l;
for (var i:int = 0;i<z;i++){
t.writeByte(0);
}
var bkey:ByteArray = new ByteArray();
bkey.writeBytes(t,0,10);
//чтение информации
var bsecret:ByteArray = new ByteArray();
bsecret.writeUTFBytes(ssecret);
l = bsecret.length;
z = 8 - (l % 8);
for (i = 0;i<z;i++){
bsecret.writeByte(0);
}
//тест
trace(bsecret);
var c:ByteArray = new ByteArray();
for(i=0;i<l;i+=8){
t=new ByteArray();
t.writeBytes(bsecret,i,8);
c.writeBytes(coding(t,bkey));
}
trace(c);
var d:ByteArray = new ByteArray();
for(i=0;i<l;i+=8){
t=new ByteArray();
t.writeBytes(c,i,8);
d.writeBytes(decoding(t,bkey));
}
trace(d);
}
//Кодирование
public function coding(block:ByteArray,key:ByteArray):ByteArray{
block = A(block,key);
block = B(block,key);
block = A(block,key);
block = B(block,key);
return block;
}
//Декодирование
public function decoding(block:ByteArray,key:ByteArray):ByteArray{
block = unB(block,key);
block = unA(block,key);
block = unB(block,key);
block = unA(block,key);
return block;
}
//Операция G
private function G(word:uint,key:ByteArray,r:uint):uint{
for(var i:uint = 0;i<4;i++){
word^= key[(4*r+i)%10];
word=equ.indexOf(word)
}
return word;
}
//Декодирование G
private function unG(word:uint,key:ByteArray,r:uint):uint{
for(var i:uint = 0;i<4;i++){
word=equ[word]
word^= key[(4*r+3-i)%10];
}
return word;
}
//Кодирование А
private function A(block:ByteArray,key:ByteArray):ByteArray{
var buf:Array = new Array(2);
for(var i:uint=0;i<8;i++){
block[0]=G(block[0],key,i);
buf[0]=block[0];
buf[1]=block[1];
block[0] ^= block[6];
block[1] ^= block[7];
block[0] ^= i;
block[1] ^= i;
block[6]=block[4];
block[7]=block[5];
block[4]=block[2];
block[5]=block[3];
block[2]=buf[0];
block[3]=buf[1];
}
return block;
}
//Декодирование А
private function unA(block:ByteArray,key:ByteArray):ByteArray{
var buf:Array = new Array(2);
for(var i:uint=0;i<8;i++){
buf[0]=block[2];
buf[1]=block[3];
block[2]=block[4];
block[3]=block[5];
block[4]=block[6];
block[5]=block[7];
block[0] ^= 7-i;
block[1] ^= 7-i;
block[6] = block[0] ^ buf[0]
block[7] = block[1] ^ buf[1]
block[0] = unG(buf[0],key,7-i);
block[1] = buf[1];
}
return block;
}
//Кодирование В
private function B(block:ByteArray,key:ByteArray):ByteArray{
var buf:Array = new Array(2);
for(var i:uint=0;i<8;i++){
block[1]=G(block[1],key,i);
buf[0]=block[0];
buf[1]=block[1];
buf[0] ^= i;
buf[1] ^= i;
buf[0] ^= block[2];
buf[1] ^= block[3];
block[2]=block[0];
block[3]=block[1];
block[0]=block[6];
block[1]=block[7];
block[6]=block[4];
block[7]=block[5];
block[4]=buf[0];
block[5]=buf[1];
}
return block;
}
//Декодирование В
private function unB(block:ByteArray,key:ByteArray):ByteArray{
var buf:Array = new Array(2);
for(var i:uint=0;i<8;i++){
buf[0] = block[4];
buf[1] = block[5];
block[4]=block[6];
block[5]=block[7];
block[6] = block[0];
block[7] = block[1];
block[0]=block[2];
block[1]=block[3];
block[1]=unG(block[1],key,7-i);
block[2] ^=7-i;
block[3] ^=7-i;
buf[0] ^= block[2];
buf[1] ^= block[3];
block[2]=buf[0];
block[3]=buf[1];
}
return block;
}
}
}
jэ›Жo®…щpзрсвµ
|