Инструменты пользователя

Инструменты сайта


software:yandex-rsa

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
software:yandex-rsa [2010/02/03 17:04] artursoftware:yandex-rsa [2017/03/23 21:59] (текущий) – внешнее изменение 127.0.0.1
Строка 7: Строка 7:
 Base64: http://farhadi.ir/works/base64 Base64: http://farhadi.ir/works/base64
  
-<code javascript>+<code html><html> 
 +<head> 
 +<title>YARSA</title> 
 +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 +<script type='text/javascript' src='bigint.js'></script> 
 + 
 +<body> 
 +<script>
  
 var test_key = "81DA1AD21759F9B8160F737E717482C56AB7BBCA2A9280B223FD8283C5CCD286E7CAF4F765954B0B4BD0746DB040CD226E444E50567AF6563F964006A9A81D9F#10001"; var test_key = "81DA1AD21759F9B8160F737E717482C56AB7BBCA2A9280B223FD8283C5CCD286E7CAF4F765954B0B4BD0746DB040CD226E444E50567AF6563F964006A9A81D9F#10001";
Строка 13: Строка 20:
  
  
 +function encrypt_yarsa(key, toenc)
 +{
 + /* Encode string like RSA
 + * Ported to JS by Artur Khasanov
 + * EMail: artur[at]hasanov.ru
 + * Website: http://hasanov.ru
 + * JS source: http://wiki.hasanov.ru/software/yandex-rsa
 + * Ported from Python script written by http://lomik.habrahabr.ru/
 + */
 + var DATA_ARR = new Array();
 + var NSTR = new String(key.split('#')[0]);
 + var ESTR = new String(key.split('#')[1]);
 + var N = new String(  bigInt2str(str2bigInt(NSTR,  16,0),10)  );
 + var E = new String(  bigInt2str(str2bigInt(ESTR,  16,0),10)  );
 + var STEP_SIZE = NSTR.length/2-1;
 + var prev_crypted = new Array(STEP_SIZE);
 + var hex_out= new String("");
 + var plain = new String();
 + for(i=0;i<toenc.length;i++)DATA_ARR[i] = ord(toenc.substr(i,1));
 + console.log('NSTR:'+NSTR + '\nESTR:' + ESTR + '\nN:'+N+'\nE:'+E+'\nStep:'+STEP_SIZE);
 + for(i=0; i<((DATA_ARR.length-1)/(STEP_SIZE+1));i++){
 + tmp = DATA_ARR.slice(i*STEP_SIZE, (i+1)*STEP_SIZE);
 + for(j=0;j<tmp.length;j++)tmp[j] = (tmp[j] ^ prev_crypted[j]);
 + tmp.reverse();
 + for(x=0;x<tmp.length;x++){
 + pow = powMod(str2bigInt('256',10,0), str2bigInt(x.toString(),10,0), str2bigInt(N,10,0));
 + pow_mult = mult(pow, str2bigInt(tmp[x].toString(),10,0));
 + plain = add(plain, pow_mult);
 + }
 + plain_pow = powMod(plain, str2bigInt(E,10,0), str2bigInt(N,10,0));
 + plain_pow_str = bigInt2str(plain_pow, 16);
 + hex_result = new Array((NSTR.length - plain_pow_str.length) + 1).join('0') + plain_pow_str;
 + min_x = Math.min(hex_result.length, prev_crypted.length*2);
 + console.log('PLAIN:' + bigInt2str(plain,10) + '\n' + 'plain_pow:' +  plain_pow_str + '\n' + 'Min_x:'+min_x);
 + for(x=0;x<min_x;x=x+2)prev_crypted[x/2] = parseInt("0x"+hex_result.substr(x, 2));
 + if(tmp.length < 16) hex_out+="00";
 + hex_out += tmp.length.toString(16).toUpperCase() + "00";
 + ks = NSTR.length/2;
 + if(ks<16) hex_out += "0";
 + hex_out += ks.toString(16).toUpperCase() + "00"; 
 + hex_out += hex_result;
 + console.log('HEX_OUT:' + hex_out+"<br>");
  
-var keyStr "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";+
 + result base64Encode(hexDecode(hex_out.toLowerCase())).replace(/[\n\r\t]/g, ""); 
 + console.log('#encrypt '+key+' '+toenc); 
 + console.log('Encrypted:' + result); 
 + return result; 
 +}
  
 +
 +var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
 /* Base64 conversion methods. /* Base64 conversion methods.
  * Copyright (c) 2006 by Ali Farhadi.  * Copyright (c) 2006 by Ali Farhadi.
Строка 104: Строка 160:
  if(code>900)code=code-848; // Может и не 900, но так работает точно.   if(code>900)code=code-848; // Может и не 900, но так работает точно. 
  return code;  return code;
-} 
- 
-function encrypt_yarsa(key, toenc) 
-{ 
- 
- var toenc_array = new Array(); 
- var DATA_ARR = new Array(); 
- var ord_str=''; 
- var toenc_str=''; 
- for(i=0;i<toenc.length;i++){ 
- toenc_array[i] = toenc.substr(i,1); //Массив с символами 
- DATA_ARR[i] = ord(toenc_array[i]); //строка с ord 
- ord_str+=','+ ord(toenc_array[i]); //Строка для дебага 
  }  }
- var NSTR = key.split('#')[0]; 
- var ESTR = key.split('#')[1]; 
- var N = new String(  bigInt2str(str2bigInt(NSTR,  16,0),10)  ); 
- var E = new String(  bigInt2str(str2bigInt(ESTR,  16,0),10)  ); 
- var STEP_SIZE = NSTR.length/2-1; 
  
- //alert('NSTR:'+NSTR + '\nESTR:' + ESTR + '\nN:'+N+'\nE:'+E+'\nStep:'+STEP_SIZE); 
- 
- var prev_crypted = new Array(24); 
- 
- var hex_out= new String(""); 
- 
- for(i=0; i<((DATA_ARR.length-1)/(STEP_SIZE+1));i++) 
- { 
- tmp = DATA_ARR.slice(i*STEP_SIZE, (i+1)*STEP_SIZE); 
- tmp_str=''; 
- for(j=0;j<tmp.length;j++) 
- { 
- tmp[j] = (tmp[j] ^ prev_crypted[j]); 
- tmp_str += ','+tmp[j]; 
- } 
- tmp.reverse();  //#29 
- var plain_str = new String(''); 
- plain = str2bigInt(plain_str,10,0); 
- for(x=0 ; x<tmp.length;x++) //#31 
- { 
- currBase=10; 
- var m1 = new String('256'); 
- var m2 = new String(x); 
- var n1=str2bigInt(m1,currBase,0); 
- var n2=str2bigInt(m2,currBase,0);   
- var n3=str2bigInt(N,currBase,0); 
- pow1 = powMod(n1, n2, n3); 
- tmp_x = new String(tmp[x]); 
- tmp_x_big = str2bigInt(tmp_x,currBase,0); 
- pow2 = mult(pow1, tmp_x_big); 
- plain = add(plain, pow2); 
- } 
- 
- var E1=str2bigInt(E,10,0); 
- var N1=str2bigInt(N,10,0); 
- plain_pow = powMod(plain, E1, N1); 
- plain_pow_str = bigInt2str(plain_pow, 16); 
- 
- //Аналог: hex_result = "".join(['0']*( len(NSTR)- len(hex_result))) + hex_result 
- hex_result = new Array((NSTR.length - plain_pow_str.length) + 1).join('0') + plain_pow_str; 
- 
- min_x = Math.min(hex_result.length, prev_crypted.length*2); 
- //alert('PLAIN:' + bigInt2str(plain,10) + '\n' + 'plain_pow:' +  plain_pow_str + '\n' + 'Min_x:'+min_x); 
- 
- prev_crypted_tmp=''; 
- for(x=0;x<min_x;x=x+2)//Через 2 
- { 
- prev_crypted[x/2] = parseInt("0x"+hex_result.substr(x, 2)); 
- prev_crypted_tmp+=','+prev_crypted[x/2]; 
- } 
- //alert('prev_crypted_tmp'+prev_crypted_tmp); 
- 
- //Аналог: ("0" if len(tmp) < 16 else "") 
- if(tmp.length < 16) hex_out+="00"; 
-  
- //+ ("%x" % len(tmp)) + "00" # current size 
- hex_out += tmp.length.toString(16).toUpperCase() + "00"; 
- //ks = len(NSTR)/2 
- ks = NSTR.length/2; 
- //Аналог: hex_out += ("0" if ks < 16 else "") + ("%x" % ks) + "00" # key size 
- if(ks<16) hex_out += "0"; 
- hex_out += ks.toString(16).toUpperCase() + "00";  
- hex_out += hex_result; 
- //document.write('HEX_OUT' + hex_out+"<br>"); 
- 
- } 
- return base64Encode(hexDecode(hex_out.toLowerCase())).replace(/[\n\r\t]/g, ""); 
-} 
 my_result = encrypt_yarsa(test_key, test_toenc); my_result = encrypt_yarsa(test_key, test_toenc);
 document.write('<b>' + my_result + "</b><br>"); document.write('<b>' + my_result + "</b><br>");
 +</script>
 +<b>IABAAAAxbcDuPr8OXGB87E0wl36pcZ2GOwTIuFr5qFY1bI/Vxspf7bqOLyuT0xswO0McObMJzpBh2SQdFI1Oatqx46I=
 +</body>
 +</html>
 </code> </code>
software/yandex-rsa.1265205852.txt.gz · Последнее изменение: 2017/03/23 21:57 (внешнее изменение)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki