Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Совместное шифрование/дешифрование, JavaScript & PHP function? 
:(
    Опции темы
IZ@TOP
Дата 21.4.2004, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Еще аопрос. Мне нужно знать точно, сколько всего есть ACSII кодов? Мне нужно сделать деление по модулю. Нужно знать где предел.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Sardar
Дата 21.4.2004, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



А в JS нету "обратно преобразовать" biggrin.gif, он как Java все строки хранит в юникоде. В принципе это не страшно, тебе нужен только первый байт. Но, например, если в заголовках или meta теге появится charset: Cp1251, а в коде: test="Привет Миру!", то test.charCodeAt(index) будет выдавать юникод для кирилици, а если charset: Cp1251, то тот же код будет выдавать юникод для латинских букв с акцентами, умляутами и т.п.
Цитата
знать где предел

\xFFFF, повторяю, тебе по барабану, бери по маске только тот байт который нужен(первый).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
IZ@TOP
Дата 23.4.2004, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Код
// -------------------------------------------- //
// LDPCrypter v1.4.2Alpha build 20040422 //
// Build date: 22.04.2004   //
// -------------------------------------------- //

var AllChars = Array('_','1','2','3','4','5','6','7','8','9','0','q','Q','w','W','e','E','r','R','t','T','y','Y','u','U','i','I','o','O','p','P','a','A','s','S','d','D','f','F','g','G','h','H','j','J','k','K','l','L','z','Z','x','X','c','C','v','V','b','B','n','N','m','M',' ','`','~','!','@','#','$','%','^','&','*','(',')','-','=','+','\\','|',',','<','.','>','/','?',';',':','\'','"','[','{',']','}','й','Й','ц','Ц','у','У','к','К','е','Е','н','Н','г','Г','ш','Ш','щ','Щ','з','З','х','Х','ъ','Ъ','ф','Ф','ы','Ы','в','В','а','А','п','П','р','Р','о','О','л','Л','д','Д','ж','Ж','э','Э','я','Я','ч','Ч','с','С','м','М','и','И','т','Т','ь','Ь','б','Б','ю','Ю','ё','Ё','№');

function charCode(tChar) {
var i = 0;
while(i < AllChars.length) {
 if(AllChars[i] == tChar) {
  return i;
 }
 i = i + 1;
}
return 0;
}

function LDPDecrypt(cData, cKey) {
var i  = 0;
var k  = 0;
var cDataChar = 0;
var cKeyChar = 0;
var TmpChar = 0;
var TmpDecData = '';
while(i < cData.length) {
 if(k > cKey.length) {
  k = 0;
 }
 cDataChar = charCode(cData.charAt(i));
 cKeyChar = charCode(cKey.charAt(k));
 if(cDataChar + cKeyChar > AllChars.length) {
  TmpChar = cDataChar + cKeyChar - AllChars.length;
 } else {
  TmpChar = cDataChar + cKeyChar;
 }
 TmpDecData = TmpDecData + AllChars[TmpChar];
 k = k + 1;
 i = i + 1;
}
return TmpDecData;
}

function LDPEncrypt(cData, cKey) {
var i  = 0;
var k  = 0;
var cDataChar = 0;
var cKeyChar = 0;
var TmpChar = 0;
var TmpEncData = '';
while(i < cData.length) {
 if(k > cKey.length) {
  k = 0;
 }
 cDataChar = charCode(cData.charAt(i));
 cKeyChar = charCode(cKey.charAt(k));
 if(cDataChar - cKeyChar < 0) {
  TmpChar = cDataChar - cKeyChar + AllChars.length;
 } else {
  TmpChar = cDataChar - cKeyChar;
 }
 TmpEncData = TmpEncData + AllChars[TmpChar];
 k = k + 1;
 i = i + 1;
}
return TmpEncData;
}
// END //


Все, терь пашет. И формочка, если кому интересно поксперементировать:

Код
<style>
body, input, textarea {
font-size: 10px;
font-family: Verdana;
}
</style>

<script src=ldpcrypt.js></script>
<script>
function Encrypt() {
var k = document.getElementById('keycode').value;
var d = document.getElementById('text').value;
document.getElementById('cryptdata').value = LDPEncrypt(d, k);
}

function Decrypt() {
var k = document.getElementById('keycode').value;
var d = document.getElementById('text').value;
document.getElementById('cryptdata').value = LDPDecrypt(d, k);
}
</script>
<form>
<input type=text id=keycode value="Please enter key"><br/>
<textarea style="width:300; height: 100;" id=text>Enter data</textarea><br/>
<textarea style="width:300; height: 100;" id=cryptdata></textarea><br/>
<input type=button onClick="Encrypt();" value=шифровать><br/>
<input type=button onClick="Decrypt();" value=расшифровать><br/>
</form>




--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Gold Dragon
Дата 23.4.2004, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 1
Всего: 71



Прикольно hehe.gif

Если не против, то повзаимствую, авось пригодиться


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 23.4.2004, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Red Dragon, пожалуйста, но тама трабл небольшой все же есть. Как все баги уберу, сообщу.



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Sardar
Дата 24.4.2004, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Вот этот же алгоритм но побыстрее и немного модифицированный.
Народ, не забывайте про хеш-таблицы, а то все больше народу вижу, которые ищют линейно по массиву. Писал на скорую руку, могут быть баги wink.gif.
Код
<script language="Javascript" type="text/javascript">
<!--
Encoder.metods=[]; //set of implemented metods(metod modules)
Encoder.encode=encoder_encode;
Encoder.decode=encoder_decode;
/* metod module {
   encode:function(string indata, string key, string original_data, int level)
   decode:function(string indata, string key, string original_data, int level)
   optional overriding: toString:function() return string -- version of module
  }*/
function Encoder() {
this.toString=function(){return this.version+"\nMetod: "+this.metods.join(" + ");};
this.version="Encoder <IZ@ATOP> v0.1";
this.encode=encoder_encode;
this.decode=encoder_decode;
this.encoded_data=this.decoded_data=null;
}
function encoder_encode(data,key) {
var ret=data;
for(var i=0; i<Encoder.metods.length; i++)
 if((ret=Encoder.metods[i].encode(ret,key,data,i))==null) return false;
return (this.encoded_data=ret);
}
function encoder_decode(data,key) {
var ret=data;
for(var i=Encoder.metods.length-1; i>=0; i--)
 if((ret=Encoder.metods[i].decode(ret,key,data,(Encoder.metods.length-i-1)))==null) return false;
return (this.decoded_data=ret);
}

//Работать будет только с русскими буквами в любой раскладке
IZATOP_metod={
data:{' ':0,'!':1,'"':2,'#':3,'$':4,'%':5,'&':6,'\'':7,'(':8,')':9,'*':10,'+':11,',':12,'-':13,'.':14,'/':15,'0':16,'1':17,'2':18,'3':19,'4':20,'5':21,'6':22,'7':23,'8':24,'9':25,':':26,';':27,'<':28,'=':29,'>':30,'?':31,'@':32,'A':33,'B':34,'C':35,'D':36,'E':37,'F':38,'G':39,'H':40,'I':41,'J':42,'K':43,'L':44,'M':45,'N':46,'O':47,'P':48,'Q':49,'R':50,'S':51,'T':52,'U':53,'V':54,'W':55,'X':56,'Y':57,'Z':58,'[':59,'\\':60,']':61,'^':62,'_':63,'`':64,'a':65,'b':66,'c':67,'d':68,'e':69,'f':70,'g':71,'h':72,'i':73,'j':74,'k':75,'l':76,'m':77,'n':78,'o':79,'p':80,'q':81,'r':82,'s':83,'t':84,'u':85,'v':86,'w':87,'x':88,'y':89,'z':90,'{':91,'|':92,'}':93,'~':94,'\u0401':95,'\u0410':96,'\u0411':97,'\u0412':98,'\u0413':99,'\u0414':100,'\u0415':101,'\u0416':102,'\u0417':103,'\u0418':104,'\u0419':105,'\u041A':106,'\u041B':107,'\u041C':108,'\u041D':109,'\u041E':110,'\u041F':111,'\u0420':112,'\u0421':113,'\u0422':114,'\u0423':115,'\u0424':116,'\u0425':117,'\u0426':118,'\u0427':119,'\u0428':120,'\u0429':121,'\u042A':122,'\u042B':123,'\u042C':124,'\u042D':125,'\u042E':126,'\u042F':127,'\u0430':128,'\u0431':129,'\u0432':130,'\u0433':131,'\u0434':132,'\u0435':133,'\u0436':134,'\u0437':135,'\u0438':136,'\u0439':137,'\u043A':138,'\u043B':139,'\u043C':140,'\u043D':141,'\u043E':142,'\u043F':143,'\u0440':144,'\u0441':145,'\u0442':146,'\u0443':147,'\u0444':148,'\u0445':149,'\u0446':150,'\u0447':151,'\u0448':152,'\u0449':153,'\u044A':154,'\u044B':155,'\u044C':156,'\u044D':157,'\u044E':158,'\u044F':159,'\u0451':160,'\u2116':161},
cdata:[' ','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','\u0401','\u0410','\u0411','\u0412','\u0413','\u0414','\u0415','\u0416','\u0417','\u0418','\u0419','\u041A','\u041B','\u041C','\u041D','\u041E','\u041F','\u0420','\u0421','\u0422','\u0423','\u0424','\u0425','\u0426','\u0427','\u0428','\u0429','\u042A','\u042B','\u042C','\u042D','\u042E','\u042F','\u0430','\u0431','\u0432','\u0433','\u0434','\u0435','\u0436','\u0437','\u0438','\u0439','\u043A','\u043B','\u043C','\u043D','\u043E','\u043F','\u0440','\u0441','\u0442','\u0443','\u0444','\u0445','\u0446','\u0447','\u0448','\u0449','\u044A','\u044B','\u044C','\u044D','\u044E','\u044F','\u0451','\u2116'],
encode:function(indata,key,original,level) {
    var ret='';
   if(!key||!indata) return null;
   for(var i=0, k=0; i<indata.length; i++, k=(k+1)%key.length) {
    ret+=this.cdata[(
     (this.cdata.length+(this.data[indata.charAt(i)]-this.data[key.charAt(k)]))%this.cdata.length
  )];
   }
   return ret;
 },
decode:function(indata,key,original,level) {
    var ret='';
   if(!key||!indata) return null;
   for(var i=0, k=0; i<indata.length; i++, k=(k+1)%key.length) {
    ret+=this.cdata[(
     (this.data[indata.charAt(i)]+this.data[key.charAt(k)])%this.cdata.length
  )];
   }
   return ret;
 },
toString:function(){return "LDP modifed";}
}
Encoder.metods.push(IZATOP_metod);

var teststr="Prosto text, prosto text";
var testkey="pass";
var enctest=Encoder.encode(teststr,testkey);
alert(enctest);
var detest=Encoder.decode(enctest,testkey);
alert(detest);
//-->
</script>

Обьект Encoder нужен только для пропуска данных через несколько видов кодирования. Если это не нужно, то пользуемся как имя_метода.{encode|decode}()

Может к вечеру напишу реализацию blowfish, алгоритм старый но надежный.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
IZ@TOP
Дата 26.4.2004, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Ждемс.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
IZ@TOP
Дата 5.5.2004, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



Блин, а что это за:
Цитата
IZATOP_metod={
data:{' ':0,'!':1,'"':2,'#':3,'$':4,'%':5,'&':6,'\'':7,'(':8,')':9,'*':10,'+':11,',':12,'-':13,'.':14,'/':15,'0':16,'1':17,'2':18,'3':19,'4':20,'5':21,'6':22,'7':23,'8':24,'9':25,':':26,';':27,'<':28,'=':29,'>':30,'?':31,'@':32,'A':33,'B':34,'C':35,'D':36,'E':37,'F':38,'G':39,'H':40,'I':41,'J':42,'K':43,'L':44,'M':45,'N':46,'O':47,'P':48,'Q':49,'R':50,'S':51,'T':52,'U':53,'V':54,'W':55,'X':56,'Y':57,'Z':58,'[':59,'\\':60,']':61,'^':62,'_':63,'`':64,'a':65,'b':66,'c':67,'d':68,'e':69,'f':70,'g':71,'h':72,'i':73,'j':74,'k':75,'l':76,'m':77,'n':78,'o':79,'p':80,'q':81,'r':82,'s':83,'t':84,'u':85,'v':86,'w':87,'x':88,'y':89,'z':90,'{':91,'|':92,'}':93,'~':94,'\u0401':95,'\u0410':96,'\u0411':97,'\u0412':98,'\u0413':99,'\u0414':100,'\u0415':101,'\u0416':102,'\u0417':103,'\u0418':104,'\u0419':105,'\u041A':106,'\u041B':107,'\u041C':108,'\u041D':109,'\u041E':110,'\u041F':111,'\u0420':112,'\u0421':113,'\u0422':114,'\u0423':115,'\u0424':116,'\u0425':117,'\u0426':118,'\u0427':119,'\u0428':120,'\u0429':121,'\u042A':122,'\u042B':123,'\u042C':124,'\u042D':125,'\u042E':126,'\u042F':127,'\u0430':128,'\u0431':129,'\u0432':130,'\u0433':131,'\u0434':132,'\u0435':133,'\u0436':134,'\u0437':135,'\u0438':136,'\u0439':137,'\u043A':138,'\u043B':139,'\u043C':140,'\u043D':141,'\u043E':142,'\u043F':143,'\u0440':144,'\u0441':145,'\u0442':146,'\u0443':147,'\u0444':148,'\u0445':149,'\u0446':150,'\u0447':151,'\u0448':152,'\u0449':153,'\u044A':154,'\u044B':155,'\u044C':156,'\u044D':157,'\u044E':158,'\u044F':159,'\u0451':160,'\u2116':161},
cdata:[' ','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','\u0401','\u0410','\u0411','\u0412','\u0413','\u0414','\u0415','\u0416','\u0417','\u0418','\u0419','\u041A','\u041B','\u041C','\u041D','\u041E','\u041F','\u0420','\u0421','\u0422','\u0423','\u0424','\u0425','\u0426','\u0427','\u0428','\u0429','\u042A','\u042B','\u042C','\u042D','\u042E','\u042F','\u0430','\u0431','\u0432','\u0433','\u0434','\u0435','\u0436','\u0437','\u0438','\u0439','\u043A','\u043B','\u043C','\u043D','\u043E','\u043F','\u0440','\u0441','\u0442','\u0443','\u0444','\u0445','\u0446','\u0447','\u0448','\u0449','\u044A','\u044B','\u044C','\u044D','\u044E','\u044F','\u0451','\u2116']

???


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Sardar
Дата 6.5.2004, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



data это хештаблица, а cdata это множество символов используемых в кодировании, как массив представил для наглядности, лучше представить множество как строка и брать символы через метод charAt(index).
Все это что бы скрипт работал быстрее smile.gif

Вот этот метод поинтересней будет, т.к. не зависит множества символов: простой XOR.
Метод режет строку на блоки и XOR'ит их в обратном направлении с ключем.
Код
XOREncryption={
block_length:5,
escape:true,
encrypt: function(indata,key,original,level) {
 var enc="",block,i=0;
 while(i<indata.length) {
  block=indata.substr(i,this.block_length);
  for(var j=block.length-1, k=0; j>=0; j--,k=(k+1)%key.length)
   enc+=String.fromCharCode(block.charCodeAt(j)^key.charCodeAt(k));
  i+=block.length;
 }
 return this.escape? escape(enc): enc;
},
decrypt: function(indata,key,original,level) {
 indata=this.escape? unescape(indata): indata;
 var dec="", encblock="", block, i=0;
 while(i<indata.length) {
  block=indata.substr(i,this.block_length);
  encblock="";
  for(var j=0,k=0; j<block.length; j++, k=(k+1)%key.length)
   encblock=String.fromCharCode(block.charCodeAt(j)^key.charCodeAt(k))+encblock;
  dec+=encblock;
  i+=block.length;
 }
 return dec;
}
}

Данные поступают URLEncoded(%код_символа). Можно убрать использование escape() функции и кодировать символы выше 128 самим(помним о юникоде).

Blowfish надежен, но таблицы преобразований занимают большой обьем(14кб) и с юникодом этот алгоритм не очень дружит. В принципе для второго байта можно повторить все 4 таблицы(все 8 таблиц рандомных данных по моему не допустимый размер), но не уверен что это не подорвет надежности метода. Второй способ: кодировать текст в UTF8->blowfish->url_encode(здесь имеем простой байт(0 - 0хFF), можно применить любой способ кодирования символов >127)

Я так понял что ты хочешь передавать и данные и ключ по сети... этого прикола я не понял. А вообще можно сделать шифрование секретных данных с уникальным паролем пользователя, но для этого редко применяют JS т.к. его вычислительные способности ограниченны(32 битные целые числа).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.