<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FSecurity%2FRSA_Encoding</id>
		<title>JavaScript DHTML/Security/RSA Encoding - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FSecurity%2FRSA_Encoding"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RSA_Encoding&amp;action=history"/>
		<updated>2026-04-04T15:14:53Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RSA_Encoding&amp;diff=3682&amp;oldid=prev</id>
		<title> в 09:59, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RSA_Encoding&amp;diff=3682&amp;oldid=prev"/>
				<updated>2010-05-26T09:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 09:59, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RSA_Encoding&amp;diff=3683&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Security/RSA_Encoding&amp;diff=3683&amp;oldid=prev"/>
				<updated>2010-05-26T07:27:15Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==RSA Encoding in JavaScript==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;!--&lt;br /&gt;
      CryptoMX Tools&lt;br /&gt;
      Copyright (C) 2004 - 2006 Derek Buitehuis&lt;br /&gt;
      This program is free software; you can redistribute it and/or&lt;br /&gt;
      modify it under the terms of the GNU General Public License&lt;br /&gt;
      as published by the Free Software Foundation; either version 2&lt;br /&gt;
      of the License, or (at your option) any later version.&lt;br /&gt;
      This program is distributed in the hope that it will be useful,&lt;br /&gt;
      but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
      GNU General Public License for more details.&lt;br /&gt;
      You should have received a copy of the GNU General Public License&lt;br /&gt;
      along with this program; if not, write to the Free Software&lt;br /&gt;
      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;RSA Encoding&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;script language=&amp;quot;JavaScript&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
var dg=&amp;quot;&amp;quot;&lt;br /&gt;
function makeArray(n) {&lt;br /&gt;
 for (var i=1; i&amp;lt;=n; i++) {&lt;br /&gt;
  this[i]=0&lt;br /&gt;
 }&lt;br /&gt;
 return this&lt;br /&gt;
}&lt;br /&gt;
function rc4(key, text) {&lt;br /&gt;
 var i, x, y, t, x2;&lt;br /&gt;
 status(&amp;quot;rc4&amp;quot;)&lt;br /&gt;
 s=makeArray(0);&lt;br /&gt;
 for (i=0; i&amp;lt;256; i++) {&lt;br /&gt;
  s[i]=i&lt;br /&gt;
 }&lt;br /&gt;
 y=0&lt;br /&gt;
 for (x=0; x&amp;lt;256; x++) {&lt;br /&gt;
  y=(key.charCodeAt(x % key.length) + s[x] + y) % 256&lt;br /&gt;
  t=s[x]; s[x]=s[y]; s[y]=t&lt;br /&gt;
 }&lt;br /&gt;
 x=0;  y=0;&lt;br /&gt;
 var z=&amp;quot;&amp;quot;&lt;br /&gt;
 for (x=0; x&amp;lt;text.length; x++) {&lt;br /&gt;
  x2=x % 256&lt;br /&gt;
  y=( s[x2] + y) % 256&lt;br /&gt;
  t=s[x2]; s[x2]=s[y]; s[y]=t&lt;br /&gt;
  z+= String.fromCharCode((text.charCodeAt(x) ^ s[(s[x2] + s[y]) % 256]))&lt;br /&gt;
 }&lt;br /&gt;
 return z&lt;br /&gt;
}&lt;br /&gt;
function badd(a,b) { // binary add&lt;br /&gt;
 var r=&amp;quot;&amp;quot;&lt;br /&gt;
 var c=0&lt;br /&gt;
 while(a || b) {&lt;br /&gt;
  c=chop(a)+chop(b)+c&lt;br /&gt;
  a=a.slice(0,-1); b=b.slice(0,-1)&lt;br /&gt;
  if(c &amp;amp; 1) {&lt;br /&gt;
   r=&amp;quot;1&amp;quot;+r&lt;br /&gt;
  } else {&lt;br /&gt;
   r=&amp;quot;0&amp;quot;+r&lt;br /&gt;
  }&lt;br /&gt;
  c&amp;gt;&amp;gt;=1&lt;br /&gt;
 }&lt;br /&gt;
 if(c) {r=&amp;quot;1&amp;quot;+r}&lt;br /&gt;
 return r&lt;br /&gt;
}&lt;br /&gt;
function chop(a) {&lt;br /&gt;
 if(a.length) {&lt;br /&gt;
  return parseInt(a.charAt(a.length-1))&lt;br /&gt;
 } else {&lt;br /&gt;
  return 0&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
function bsub(a,b) { // binary subtract&lt;br /&gt;
 var r=&amp;quot;&amp;quot;&lt;br /&gt;
 var c=0&lt;br /&gt;
 while(a) {&lt;br /&gt;
  c=chop(a)-chop(b)-c&lt;br /&gt;
  a=a.slice(0,-1); b=b.slice(0,-1)&lt;br /&gt;
  if(c==0) {&lt;br /&gt;
   r=&amp;quot;0&amp;quot;+r&lt;br /&gt;
  }&lt;br /&gt;
  if(c == 1) {&lt;br /&gt;
   r=&amp;quot;1&amp;quot;+r&lt;br /&gt;
   c=0&lt;br /&gt;
  }&lt;br /&gt;
  if(c == -1) {&lt;br /&gt;
   r=&amp;quot;1&amp;quot;+r&lt;br /&gt;
   c=1&lt;br /&gt;
  }&lt;br /&gt;
  if(c==-2) {&lt;br /&gt;
   r=&amp;quot;0&amp;quot;+r&lt;br /&gt;
   c=1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 if(b || c) {return &amp;quot;&amp;quot;}&lt;br /&gt;
 return bnorm(r)&lt;br /&gt;
}&lt;br /&gt;
function bnorm(r) { // trim off leading 0s&lt;br /&gt;
 var i=r.indexOf(&amp;quot;1&amp;quot;)&lt;br /&gt;
 if(i == -1) {&lt;br /&gt;
  return &amp;quot;0&amp;quot;&lt;br /&gt;
 } else {&lt;br /&gt;
  return r.substr(i)&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
function bmul(a,b) { // binary multiply&lt;br /&gt;
 var r=&amp;quot;&amp;quot;; var p=&amp;quot;&amp;quot;&lt;br /&gt;
 while(a) {&lt;br /&gt;
  if(chop(a) == &amp;quot;1&amp;quot;) {&lt;br /&gt;
   r=badd(r,b+p)&lt;br /&gt;
  }&lt;br /&gt;
  a=a.slice(0,-1)&lt;br /&gt;
  p+=&amp;quot;0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 return r;&lt;br /&gt;
}&lt;br /&gt;
function bmod(a,m) { // binary modulo&lt;br /&gt;
 return bdiv(a,m).mod&lt;br /&gt;
}&lt;br /&gt;
function bdiv(a,m) { // binary divide &amp;amp; modulo&lt;br /&gt;
 // this.q = quotient this.mod=remainder&lt;br /&gt;
 var lm=m.length, al=a.length&lt;br /&gt;
 var p=&amp;quot;&amp;quot;,d&lt;br /&gt;
 this.q=&amp;quot;&amp;quot;&lt;br /&gt;
 for(n=0; n&amp;lt;al; n++) {&lt;br /&gt;
  p=p+a.charAt(n);&lt;br /&gt;
  if(p.length&amp;lt;lm || (d=bsub(p,m)) == &amp;quot;&amp;quot;) {&lt;br /&gt;
   this.q+=&amp;quot;0&amp;quot;&lt;br /&gt;
  } else {&lt;br /&gt;
   if(this.q.charAt(0)==&amp;quot;0&amp;quot;) {&lt;br /&gt;
    this.q=&amp;quot;1&amp;quot;&lt;br /&gt;
   } else {&lt;br /&gt;
    this.q+=&amp;quot;1&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   p=d&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 this.mod=bnorm(p)&lt;br /&gt;
 return this&lt;br /&gt;
}&lt;br /&gt;
function bmodexp(x,y,m) { // binary modular exponentiation&lt;br /&gt;
 var r=&amp;quot;1&amp;quot;&lt;br /&gt;
 status(&amp;quot;bmodexp &amp;quot;+x+&amp;quot; &amp;quot;+y+&amp;quot; &amp;quot;+m)&lt;br /&gt;
 while(y) {&lt;br /&gt;
  if(chop(y) == 1) {&lt;br /&gt;
   r=bmod(bmul(r,x),m)&lt;br /&gt;
  }&lt;br /&gt;
  y=y.slice(0,y.length-1)&lt;br /&gt;
  x=bmod(bmul(x,x),m)&lt;br /&gt;
 }&lt;br /&gt;
 return bnorm(r)&lt;br /&gt;
}&lt;br /&gt;
function modexp(x,y,m) { // modular exponentiation&lt;br /&gt;
 // convert packed bits (text) into strings of 0s and 1s&lt;br /&gt;
 return b2t(bmodexp(t2b(x),t2b(y),t2b(m)))&lt;br /&gt;
}&lt;br /&gt;
function i2b(i) { // convert integer to binary&lt;br /&gt;
 var r=&amp;quot;&amp;quot;&lt;br /&gt;
 while(i) {&lt;br /&gt;
  if(i &amp;amp; 1) { r=&amp;quot;1&amp;quot;+r} else {r=&amp;quot;0&amp;quot;+r}&lt;br /&gt;
  i&amp;gt;&amp;gt;=1;&lt;br /&gt;
 }&lt;br /&gt;
 return r? r:&amp;quot;0&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
function t2b(s) {&lt;br /&gt;
 var r=&amp;quot;&amp;quot;&lt;br /&gt;
 if(s==&amp;quot;&amp;quot;) {return &amp;quot;0&amp;quot;}&lt;br /&gt;
 while(s.length) {&lt;br /&gt;
  var i=s.charCodeAt(0)&lt;br /&gt;
  s=s.substr(1)&lt;br /&gt;
  for(n=0; n&amp;lt;8; n++) {&lt;br /&gt;
   r=((i &amp;amp; 1)? &amp;quot;1&amp;quot;:&amp;quot;0&amp;quot;) + r&lt;br /&gt;
   i&amp;gt;&amp;gt;=1;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 return bnorm(r)&lt;br /&gt;
}&lt;br /&gt;
function b2t(b) {&lt;br /&gt;
 var r=&amp;quot;&amp;quot;; var v=0; var m=1&lt;br /&gt;
 while(b.length) {&lt;br /&gt;
  v|=chop(b)*m&lt;br /&gt;
  b=b.slice(0,-1)&lt;br /&gt;
  m&amp;lt;&amp;lt;=1&lt;br /&gt;
  if(m==256 || b==&amp;quot;&amp;quot;) {&lt;br /&gt;
   r+=String.fromCharCode(v)&lt;br /&gt;
   v=0; m=1&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 return r&lt;br /&gt;
}&lt;br /&gt;
b64s=&amp;quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_&amp;quot;&amp;quot;&lt;br /&gt;
function textToBase64(t) {&lt;br /&gt;
 status(&amp;quot;t 2 b64&amp;quot;)&lt;br /&gt;
 var r=&amp;quot;&amp;quot;; var m=0; var a=0; var tl=t.length-1; var c&lt;br /&gt;
 for(n=0; n&amp;lt;=tl; n++) {&lt;br /&gt;
  c=t.charCodeAt(n)&lt;br /&gt;
  r+=b64s.charAt((c &amp;lt;&amp;lt; m | a) &amp;amp; 63)&lt;br /&gt;
  a = c &amp;gt;&amp;gt; (6-m)&lt;br /&gt;
  m+=2&lt;br /&gt;
  if(m==6 || n==tl) {&lt;br /&gt;
   r+=b64s.charAt(a)&lt;br /&gt;
   if((n%45)==44) {r+=&amp;quot;\n&amp;quot;}&lt;br /&gt;
   m=0&lt;br /&gt;
   a=0&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 return r&lt;br /&gt;
}&lt;br /&gt;
function base64ToText(t) {&lt;br /&gt;
 status(&amp;quot;b64 2 t&amp;quot;)&lt;br /&gt;
 var r=&amp;quot;&amp;quot;; var m=0; var a=0; var c&lt;br /&gt;
 for(n=0; n&amp;lt;t.length; n++) {&lt;br /&gt;
  c=b64s.indexOf(t.charAt(n))&lt;br /&gt;
  if(c &amp;gt;= 0) {&lt;br /&gt;
   if(m) {&lt;br /&gt;
    r+=String.fromCharCode((c &amp;lt;&amp;lt; (8-m))&amp;amp;255 | a)&lt;br /&gt;
   }&lt;br /&gt;
   a = c &amp;gt;&amp;gt; m&lt;br /&gt;
   m+=2&lt;br /&gt;
   if(m==8) { m=0 }&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 return r&lt;br /&gt;
}&lt;br /&gt;
function rand(n) {  return Math.floor(Math.random() * n) }&lt;br /&gt;
function rstring(s,l) {&lt;br /&gt;
 var r=&amp;quot;&amp;quot;&lt;br /&gt;
 var sl=s.length&lt;br /&gt;
 while(l--&amp;gt;0) {&lt;br /&gt;
  r+=s.charAt(rand(sl))&lt;br /&gt;
 }&lt;br /&gt;
 //status(&amp;quot;rstring &amp;quot;+r)&lt;br /&gt;
 return r&lt;br /&gt;
}&lt;br /&gt;
function key2(k) {&lt;br /&gt;
 var l=k.length&lt;br /&gt;
 var kl=l&lt;br /&gt;
 var r=&amp;quot;&amp;quot;&lt;br /&gt;
 while(l--) {&lt;br /&gt;
  r+=k.charAt((l*3)%kl)&lt;br /&gt;
 }&lt;br /&gt;
 return r&lt;br /&gt;
}&lt;br /&gt;
function rsaEncrypt(keylen,key,mod,text) {&lt;br /&gt;
 // I read that rc4 with keys larger than 256 bytes doesn&amp;quot;t significantly&lt;br /&gt;
 // increase the level of rc4 encryption because it&amp;quot;s sbuffer is 256 bytes&lt;br /&gt;
 // makes sense to me, but what do i know...&lt;br /&gt;
 status(&amp;quot;encrypt&amp;quot;)&lt;br /&gt;
 if(text.length &amp;gt;= keylen) {&lt;br /&gt;
  var sessionkey=rc4(rstring(text,keylen),rstring(text,keylen))&lt;br /&gt;
  // session key must be less than mod, so mod it&lt;br /&gt;
  sessionkey=b2t(bmod(t2b(sessionkey),t2b(mod)))&lt;br /&gt;
  alert(&amp;quot;sessionkey=&amp;quot;+sessionkey)&lt;br /&gt;
  // return the rsa encoded key and the encrypted text&lt;br /&gt;
  // i&amp;quot;m double encrypting because it would seem to me to&lt;br /&gt;
  // lessen known-plaintext attacks, but what do i know&lt;br /&gt;
  return modexp(sessionkey,key,mod) +&lt;br /&gt;
   rc4(key2(sessionkey),rc4(sessionkey,text))&lt;br /&gt;
 } else {&lt;br /&gt;
  // don&amp;quot;t need a session key&lt;br /&gt;
  return modexp(text,key,mod)&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
function rsaDecrypt(keylen,key,mod,text) {&lt;br /&gt;
 status(&amp;quot;decrypt&amp;quot;)&lt;br /&gt;
 if(text.length &amp;lt;= keylen) {&lt;br /&gt;
  return modexp(text,key,mod)&lt;br /&gt;
 } else {&lt;br /&gt;
  // sessionkey is first keylen bytes&lt;br /&gt;
  var sessionkey=text.substr(0,keylen)&lt;br /&gt;
  text=text.substr(keylen)&lt;br /&gt;
  // un-rsa the session key&lt;br /&gt;
  sessionkey=modexp(sessionkey,key,mod)&lt;br /&gt;
  alert(&amp;quot;sessionkey=&amp;quot;+sessionkey)&lt;br /&gt;
  // double decrypt the text&lt;br /&gt;
  return rc4(sessionkey,rc4(key2(sessionkey,text),text))&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
function trim2(d) { return d.substr(0,d.lastIndexOf(&amp;quot;1&amp;quot;)+1) }&lt;br /&gt;
function bgcd(u,v) { // return greatest common divisor&lt;br /&gt;
 // algorythm from http://algo.inria.fr/banderier/Seminar/Vallee/index.html&lt;br /&gt;
 var d, t&lt;br /&gt;
 while(1) {&lt;br /&gt;
  d=bsub(v,u)&lt;br /&gt;
  //alert(v+&amp;quot; - &amp;quot;+u+&amp;quot; = &amp;quot;+d)&lt;br /&gt;
  if(d==&amp;quot;0&amp;quot;) {return u}&lt;br /&gt;
  if(d) {&lt;br /&gt;
   if(d.substr(-1)==&amp;quot;0&amp;quot;) {&lt;br /&gt;
    v=d.substr(0,d.lastIndexOf(&amp;quot;1&amp;quot;)+1) // v=(v-u)/2^val2(v-u)&lt;br /&gt;
   } else v=d&lt;br /&gt;
  } else {&lt;br /&gt;
   t=v; v=u; u=t // swap u and v&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
function isPrime(p) {&lt;br /&gt;
 var n,p1,p12,t&lt;br /&gt;
 p1=bsub(p,&amp;quot;1&amp;quot;)&lt;br /&gt;
 t=p1.length-p1.lastIndexOf(&amp;quot;1&amp;quot;)&lt;br /&gt;
 p12=trim2(p1)&lt;br /&gt;
 for(n=0; n&amp;lt;2; n+=mrtest(p,p1,p12,t)) {&lt;br /&gt;
  if(n&amp;lt;0) return 0&lt;br /&gt;
 }&lt;br /&gt;
 return 1&lt;br /&gt;
}&lt;br /&gt;
function mrtest(p,p1,p12,t) {&lt;br /&gt;
 // Miller-Rabin test from forum.swathmore.edu/dr.math/&lt;br /&gt;
 var n,a,u&lt;br /&gt;
  a=&amp;quot;1&amp;quot;+rstring(&amp;quot;01&amp;quot;,Math.floor(p.length/2)) // random a&lt;br /&gt;
  //alert(&amp;quot;mrtest &amp;quot;+p+&amp;quot;, &amp;quot;+p1+&amp;quot;, &amp;quot;+a+&amp;quot;-&amp;quot;+p12)&lt;br /&gt;
  u=bmodexp(a,p12,p)&lt;br /&gt;
  if(u==&amp;quot;1&amp;quot;) {return 1}&lt;br /&gt;
  for(n=0;n&amp;lt;t;n++) {&lt;br /&gt;
   u=bmod(bmul(u,u),p)&lt;br /&gt;
   //dg+=u+&amp;quot; &amp;quot;&lt;br /&gt;
   if(u==&amp;quot;1&amp;quot;) return -100&lt;br /&gt;
   if(u==p1) return 1&lt;br /&gt;
  }&lt;br /&gt;
  return -100&lt;br /&gt;
}&lt;br /&gt;
pfactors=&amp;quot;11100011001110101111000110001101&amp;quot;&lt;br /&gt;
 // this number is 3*5*7*11*13*17*19*23*29*31*37&lt;br /&gt;
function prime(bits) {&lt;br /&gt;
 // return a prime number of bits length&lt;br /&gt;
 var p=&amp;quot;1&amp;quot;+rstring(&amp;quot;001&amp;quot;,bits-2)+&amp;quot;1&amp;quot;&lt;br /&gt;
 while( ! isPrime(p)) {&lt;br /&gt;
  p=badd(p,&amp;quot;10&amp;quot;); // add 2&lt;br /&gt;
 }&lt;br /&gt;
 alert(&amp;quot;p is &amp;quot;+p)&lt;br /&gt;
 return p&lt;br /&gt;
}&lt;br /&gt;
function genkey(bits) {&lt;br /&gt;
 q=prime(bits)&lt;br /&gt;
 do {&lt;br /&gt;
  p=q&lt;br /&gt;
  q=prime(bits)&lt;br /&gt;
 } while(bgcd(p,q)!=&amp;quot;1&amp;quot;)&lt;br /&gt;
 p1q1=bmul(bsub(p,&amp;quot;1&amp;quot;),bsub(q,&amp;quot;1&amp;quot;))&lt;br /&gt;
 // now we need a d, e,  and an n so that:&lt;br /&gt;
 //  p1q1*n-1=de  -&amp;gt; bmod(bsub(bmul(d,e),&amp;quot;1&amp;quot;),p1q1)=&amp;quot;0&amp;quot;&lt;br /&gt;
 // or more specifically an n so that d &amp;amp; p1q1 are rel prime and factor e&lt;br /&gt;
 n=&amp;quot;1&amp;quot;+rstring(&amp;quot;001&amp;quot;,Math.floor(bits/3)+2)&lt;br /&gt;
 alert(&amp;quot;n is &amp;quot;+n)&lt;br /&gt;
 factorMe=badd(bmul(p1q1,n),&amp;quot;1&amp;quot;)&lt;br /&gt;
 alert(&amp;quot;factor is &amp;quot;+factorMe)&lt;br /&gt;
 //e=bgcd(factorMe,p1q1)&lt;br /&gt;
 //alert(&amp;quot;bgcd=&amp;quot;+e)&lt;br /&gt;
 e=&amp;quot;1&amp;quot;&lt;br /&gt;
 // is this always 1?&lt;br /&gt;
 //r=bdiv(factorMe,e)&lt;br /&gt;
 //alert(&amp;quot;r=&amp;quot;+r.q+&amp;quot; &amp;quot;+r.mod)&lt;br /&gt;
 //if(r.mod != &amp;quot;0&amp;quot;) {alert(&amp;quot;Mod Error!&amp;quot;)}&lt;br /&gt;
 //factorMe=r.q&lt;br /&gt;
 d=bgcd(factorMe,&amp;quot;11100011001110101111000110001101&amp;quot;)&lt;br /&gt;
 alert(&amp;quot;d=&amp;quot;+d)&lt;br /&gt;
 if(d == &amp;quot;1&amp;quot; &amp;amp;&amp;amp; e == &amp;quot;1&amp;quot;) {alert(&amp;quot;Factoring failed &amp;quot;+factorMe+&amp;quot; p=&amp;quot;+p+&amp;quot; q=&amp;quot;+q)}&lt;br /&gt;
 e=bmul(e,d)&lt;br /&gt;
 r=bdiv(factorMe,d)&lt;br /&gt;
 d=r.q&lt;br /&gt;
 if(r.mod != &amp;quot;0&amp;quot;) {alert(&amp;quot;Mod Error 2!&amp;quot;)}&lt;br /&gt;
 this.mod=b2t(bmul(p,q))&lt;br /&gt;
 this.pub=b2t(e)&lt;br /&gt;
 this.priv=b2t(d)&lt;br /&gt;
}&lt;br /&gt;
function status(a) { }//alert(a)}&lt;br /&gt;
// --&amp;gt;&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;h3&amp;gt;RSA-type:&amp;lt;/h3&amp;gt;&lt;br /&gt;
    Note that long keys will likely be slow. &amp;lt;p&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; name=&amp;quot;RSA&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;keylength:&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;4&amp;quot; name=&amp;quot;keylen&amp;quot; value=&amp;quot;2&amp;quot;&amp;gt; How many bytes?&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;key:&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;60&amp;quot; name=&amp;quot;key&amp;quot; value=&amp;quot;10001&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Binary&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&lt;br /&gt;
              &amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;modulo:&amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; size=&amp;quot;60&amp;quot; name=&amp;quot;mod&amp;quot; value=&amp;quot;110010100001&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
             &amp;lt;td&amp;gt;Binary&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;text:&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&amp;lt;textarea name=&amp;quot;text&amp;quot; rows=&amp;quot;6&amp;quot; cols=&amp;quot;60&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;For sample values you can use:&amp;lt;br&amp;gt;&lt;br /&gt;
            Public Key: 10001&amp;lt;br&amp;gt;&lt;br /&gt;
            Modulo: 110010100001&amp;lt;br&amp;gt;&lt;br /&gt;
            Private Key: 101011000001&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;script language=&amp;quot;JavaScript&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
                function RSAencryptDemo() {&lt;br /&gt;
                 document.RSA.text.value=textToBase64(&lt;br /&gt;
                  rsaEncrypt(&lt;br /&gt;
                   parseInt(document.RSA.keylen.value),&lt;br /&gt;
                   b2t(document.RSA.key.value),&lt;br /&gt;
                   b2t(document.RSA.mod.value),&lt;br /&gt;
                   document.RSA.text.value))&lt;br /&gt;
                 document.RSA.key.value=&amp;quot;101011000001&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
                function RSAdecryptDemo() {&lt;br /&gt;
                 document.RSA.text.value=rsaDecrypt(&lt;br /&gt;
                  parseInt(document.RSA.keylen.value),&lt;br /&gt;
                  b2t(document.RSA.key.value),&lt;br /&gt;
                  b2t(document.RSA.mod.value),&lt;br /&gt;
                  base64ToText(document.RSA.text.value))&lt;br /&gt;
                 document.RSA.key.value=&amp;quot;10001&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
              // --&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&lt;br /&gt;
              &amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;button&amp;quot; name=&amp;quot;B1&amp;quot; value=&amp;quot;Encrypt&amp;quot; onclick=&amp;quot;RSAencryptDemo()&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;input type=&amp;quot;button&amp;quot; name=&amp;quot;B2&amp;quot; value=&amp;quot;Decrypt&amp;quot; onclick=&amp;quot;RSAdecryptDemo()&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>