software:yandex-rsa
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версия | Следующая версияСледующая версия справа и слева | ||
software:yandex-rsa [2010/02/03 17:00] – artur | software:yandex-rsa [2010/02/03 17:04] – artur | ||
---|---|---|---|
Строка 7: | Строка 7: | ||
Base64: http:// | Base64: http:// | ||
- | < | + | < |
+ | var test_key = " | ||
+ | var test_toenc = ' | ||
+ | |||
+ | var keyStr = " | ||
+ | |||
+ | /* Base64 conversion methods. | ||
+ | * Copyright (c) 2006 by Ali Farhadi. | ||
+ | * released under the terms of the Gnu Public License. | ||
+ | * see the GPL for details. | ||
+ | * | ||
+ | * Email: ali[at]farhadi[dot]ir | ||
+ | * Website: http:// | ||
+ | */ | ||
+ | |||
+ | //Encodes data to Base64 format | ||
+ | function base64Encode(data){ | ||
+ | if (typeof(btoa) == ' | ||
+ | var b64_map = ' | ||
+ | var byte1, byte2, byte3; | ||
+ | var ch1, ch2, ch3, ch4; | ||
+ | var result = new Array(); //array is used instead of string because in most of browsers working with large arrays is faster than working with large strings | ||
+ | var j=0; | ||
+ | for (var i=0; i< | ||
+ | byte1 = data.charCodeAt(i); | ||
+ | byte2 = data.charCodeAt(i+1); | ||
+ | byte3 = data.charCodeAt(i+2); | ||
+ | ch1 = byte1 >> 2; | ||
+ | ch2 = ((byte1 & 3) << 4) | (byte2 >> 4); | ||
+ | ch3 = ((byte2 & 15) << 2) | (byte3 >> 6); | ||
+ | ch4 = byte3 & 63; | ||
+ | |||
+ | if (isNaN(byte2)) { | ||
+ | ch3 = ch4 = 64; | ||
+ | } else if (isNaN(byte3)) { | ||
+ | ch4 = 64; | ||
+ | } | ||
+ | |||
+ | result[j++] = b64_map.charAt(ch1)+b64_map.charAt(ch2)+b64_map.charAt(ch3)+b64_map.charAt(ch4); | ||
+ | } | ||
+ | |||
+ | return result.join('' | ||
+ | } | ||
+ | |||
+ | |||
+ | /* Hexadecimal conversion methods. | ||
+ | * Copyright (c) 2006 by Ali Farhadi. | ||
+ | * released under the terms of the Gnu Public License. | ||
+ | * see the GPL for details. | ||
+ | * | ||
+ | * Email: ali[at]farhadi[dot]ir | ||
+ | * Website: http:// | ||
+ | */ | ||
+ | |||
+ | //Encodes data to Hex(base16) format | ||
+ | function hexEncode(data){ | ||
+ | var b16_digits = ' | ||
+ | var b16_map = new Array(); | ||
+ | for (var i=0; i<256; i++) { | ||
+ | b16_map[i] = b16_digits.charAt(i >> 4) + b16_digits.charAt(i & 15); | ||
+ | } | ||
+ | |||
+ | var result = new Array(); | ||
+ | for (var i=0; i< | ||
+ | result[i] = b16_map[data.charCodeAt(i)]; | ||
+ | } | ||
+ | |||
+ | return result.join('' | ||
+ | } | ||
+ | |||
+ | //Decodes Hex(base16) formated data | ||
+ | function hexDecode(data){ | ||
+ | var b16_digits = ' | ||
+ | var b16_map = new Array(); | ||
+ | for (var i=0; i<256; i++) { | ||
+ | b16_map[b16_digits.charAt(i >> 4) + b16_digits.charAt(i & 15)] = String.fromCharCode(i); | ||
+ | } | ||
+ | if (!data.match(/ | ||
+ | |||
+ | if (data.length % 2) data = ' | ||
+ | |||
+ | var result = new Array(); | ||
+ | var j=0; | ||
+ | for (var i=0; i< | ||
+ | result[j++] = b16_map[data.substr(i, | ||
+ | } | ||
+ | |||
+ | return result.join('' | ||
+ | } | ||
+ | |||
+ | function ord( string ) { // Return ASCII value of character | ||
+ | code = string.charCodeAt(0); | ||
+ | if(code> | ||
+ | return code; | ||
+ | } | ||
+ | |||
+ | function encrypt_yarsa(key, | ||
+ | { | ||
+ | |||
+ | var toenc_array = new Array(); | ||
+ | var DATA_ARR = new Array(); | ||
+ | var ord_str=''; | ||
+ | var toenc_str=''; | ||
+ | for(i=0; | ||
+ | toenc_array[i] = toenc.substr(i, | ||
+ | DATA_ARR[i] = ord(toenc_array[i]); | ||
+ | ord_str+=',' | ||
+ | } | ||
+ | var NSTR = key.split('#' | ||
+ | var ESTR = key.split('#' | ||
+ | var N = new String( | ||
+ | var E = new String( | ||
+ | var STEP_SIZE = NSTR.length/ | ||
+ | |||
+ | // | ||
+ | |||
+ | var prev_crypted = new Array(24); | ||
+ | |||
+ | var hex_out= new String("" | ||
+ | |||
+ | for(i=0; i< | ||
+ | { | ||
+ | tmp = DATA_ARR.slice(i*STEP_SIZE, | ||
+ | tmp_str=''; | ||
+ | for(j=0; | ||
+ | { | ||
+ | tmp[j] = (tmp[j] ^ prev_crypted[j]); | ||
+ | tmp_str += ',' | ||
+ | } | ||
+ | tmp.reverse(); | ||
+ | var plain_str = new String('' | ||
+ | plain = str2bigInt(plain_str, | ||
+ | for(x=0 ; x< | ||
+ | { | ||
+ | currBase=10; | ||
+ | var m1 = new String(' | ||
+ | var m2 = new String(x); | ||
+ | var n1=str2bigInt(m1, | ||
+ | var n2=str2bigInt(m2, | ||
+ | var n3=str2bigInt(N, | ||
+ | pow1 = powMod(n1, n2, n3); | ||
+ | tmp_x = new String(tmp[x]); | ||
+ | tmp_x_big = str2bigInt(tmp_x, | ||
+ | pow2 = mult(pow1, tmp_x_big); | ||
+ | plain = add(plain, pow2); | ||
+ | } | ||
+ | |||
+ | var E1=str2bigInt(E, | ||
+ | var N1=str2bigInt(N, | ||
+ | plain_pow = powMod(plain, | ||
+ | plain_pow_str = bigInt2str(plain_pow, | ||
+ | |||
+ | // | ||
+ | hex_result = new Array((NSTR.length - plain_pow_str.length) + 1).join(' | ||
+ | |||
+ | min_x = Math.min(hex_result.length, | ||
+ | // | ||
+ | |||
+ | prev_crypted_tmp=''; | ||
+ | for(x=0; | ||
+ | { | ||
+ | prev_crypted[x/ | ||
+ | prev_crypted_tmp+=',' | ||
+ | } | ||
+ | // | ||
+ | |||
+ | // | ||
+ | if(tmp.length < 16) hex_out+=" | ||
+ | |||
+ | //+ (" | ||
+ | hex_out += tmp.length.toString(16).toUpperCase() + " | ||
+ | //ks = len(NSTR)/2 | ||
+ | ks = NSTR.length/ | ||
+ | // | ||
+ | if(ks< | ||
+ | hex_out += ks.toString(16).toUpperCase() + " | ||
+ | hex_out += hex_result; | ||
+ | // | ||
+ | |||
+ | } | ||
+ | return base64Encode(hexDecode(hex_out.toLowerCase())).replace(/ | ||
+ | } | ||
+ | my_result = encrypt_yarsa(test_key, | ||
+ | document.write('< | ||
</ | </ |
software/yandex-rsa.txt · Последнее изменение: 2017/03/23 21:59 — 127.0.0.1