flex 文件


  package
  {
  import mx.controls.Alert;
  private class BigInteger(
  var dbits = 30; 
  var canary:Number = 0xdeadbeefcafe; 
  var j_lm:Boolean = ((canary & 0xffffff)==0xefcafe); 
  dbits = 30
  var BI_FP:Number = 52;      
  public  var DB:Number = dbits;
  public  var DM:Number = ((1 Array,j:Number,c:Number,n:N umber) :Number{ 
  var xl:Number = x&0x7fff, xh:Number = x>>15;
  while(--n >= 0) { 
  var l:Number = this[i]&0x7fff; 
  var h:Number = this[i++]>>15; 
  var m:Number = xh*l+h*xl; 
  l = xl*l+((m&0x7fff)>>30)+(m>>>15)+xh*h+(c>>>30); 
  w[j++] = l&0x3fffffff; } 
  return c; }
  public function copyTo(r:Object):void {
  for(var i:Number = this.t-1; i >= 0; --i) 
  r[i] = this[i];
  r.t = this.t;
  r.s = this.s;
  }
  public function fromInt(x:Number):void {
  this.t = 1;
  this.s = (x 0) this[0] = x;
  else if(x = 0) {
  var x = (k==8)?s[i]&0xff:intAt(s,i);
  if(x  this.DB) {
  this[this.t-1] |= (x&((1>(this.DB-sh));
  }
  else
  this[this.t-1] |= x= this.DB) sh -= this.DB;
  }
  if(k == 8 && (s[0]&0x80) != 0) {
  this.s = -1;
  if(sh > 0) this[this.t-1] |= ((1 0 && this[this.t-1] == c) --this.t;
  }
  public function dlShiftTo(n:Number,r:Array):void {
  var i:Number;
  for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
  for(i = n-1; i >= 0; --i) r[i] = 0;
  r.t = this.t+n;
  r.s = this.s;
  }
  public function drShiftTo(n:Number,r):void {
  for(var i = n; i = 0; --i) {
  r[i+ds+1] = (this[i]>>cbs)|c;
  c = (this[i]&bm)= 0; --i) r[i] = 0;
  r[ds] = c;
  r.t = this.t+ds+1;
  r.s = this.s;
  r.clamp();
  }
  public function rShiftTo(n,r):void {
  r.s = this.s;
  var ds:Number = Math.floor(n/this.DB);
  if(ds >= this.t) { r.t = 0; return; }
  var bs:Number = n%this.DB;
  var cbs:Number = this.DB-bs;
  var bm :Number = (1>bs;
  for(var i = ds+1; i >bs;
  }
  if(bs > 0) r[this.t-ds-1] |= (this.s&bm)>= this.DB;
  }
  if(a.t >= this.DB;
  }
  c += this.s;
  }
  else {
  c += this.s;
  while(i >= this.DB;
  }
  c -= a.s;
  }
  r.s = (c 0) r[i++] = c;
  r.t = i;
  r.clamp();
  }
  public function multiplyTo(a:Number,r:Number) {
  var x:BigInteger = this.abs(), y:Number = a.abs();
  var i:Number = x.t;
  r.t = i+y.t;
  while(--i >= 0) r[i] = 0;
  for(i = 0; i = 0) r[i] = 0;
  for(i = 0; i = x.DV) {
  r[i+x.t] -= x.DV;
  r[i+x.t+1] = 1;
  }
  }
  if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
  r.s = 0;
  r.clamp();
  }
  public function divRemTo(m,q,r):void {
  var pm:BigInteger = m.abs();
  if(pm.t  0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
  else { pm.copyTo(y); pt.copyTo(r); }
  var ys :Number= y.t;
  var y0:Number = y[ys-1];
  if(y0 == 0) return;
  var yt = y0*(11)?y[ys-2]>>this.F2:0);
  var d1 = this.FV/yt, d2 = (1= 0) {
  r[r.t++] = 1;
  r.subTo(t,r);
  }
  BigInteger.ONE.dlShiftTo(ys,t);
  t.subTo(y,y); 
  while(y.t = 0) {
  var qd:Number = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e) *d2);
  if((r[i]+=y.am(0,qd,r,j,0,ys))  0) r.rShiftTo(nsh,r); 
  if(ts  0) a.subTo(r,r);
  return r;
  }
  public function invDigit():Number {
  if(this.t 0)?this.DV-y:-y;
  }
  public function isEven():Boolean { return ((this.t>0)?(this[0]&1):this.s) == 0; }
  public function exp(e:Number,z:Montgomery):BigInteger {
  if(e > 0xffffffff || e = 0) {
  z.sqrTo(r,r2);
  if((e&(1 0) z.mulTo(r2,g,r);
  else { var t = r; r = r2; r2 = t; }
  }
  return z.revert(r);
  }
  public function toString(b) {
  if(this.s  0) {
  if(p >p) > 0) { m = true; r = int2char(d); }
  while(i >= 0) {
  if(p >(p+=this.DB-k);
  }
  else {
  d = (this[i]>>(p-=k))&km;
  if(p  0) m = true;
  if(m) r += int2char(d);
  }
  }
  return m?r:"0";
  }
  public function abs():BigInteger { return (this.s= 0) if((r=this[i]-a[i]) != 0) return r;
  return 0;
  }
  public function bitLength():BigInteger {
  if(this.t >>16) != 0) { x = t; r += 16; }
  if((t=x>>8) != 0) { x = t; r += 8; }
  if((t=x>>4) != 0) { x = t; r += 4; }
  if((t=x>>2) != 0) { x = t; r += 2; }
  if((t=x>>1) != 0) { x = t; r += 1; }
  return r;
  }
  public function compareTo(a:BigInteger) {
  var r = this.s-a.s;
  if(r != 0) return r;
  var i = this.t;
  r = i-a.t;
  if(r != 0) return r;
  while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
  return 0;
  }
  public function bitLength() {
  if(this.t = 0) return x.mod(this.m);
  else return x;
  }
  public function revert(x:Object):Object { return x; }
  public function reduce(x:BigInteger):void { x.divRemTo(this.m, null,x); }
  public function mulTo(x:BigInteger,y:BigInteger,r:BigInteger):void { x.multiplyTo(y,r); reduce(r); }
  public function sqrTo(x:BigInteger,r:BigInteger):void { x.squareTo(r); reduce(r); }
  } private class Montgomery{
  private var m:BigInteger;
  private var mp:Number;
  private var mpl:Number;
  private var mph:Number;
  private var um:Number;
  private var mt2:Number;
  public function Montgomery(m:BigInteger){
  this.m = m;
  this.mp = m.invDigit();
  this.mpl = this.mp&0x7fff;
  this.mph = this.mp>>15;
  this.um = (1 0) this.m.subTo(r,r);
  return r;
  }
  public function revert(x:BigInteger):BigInteger {
  var r:BigInteger = new BigInteger().nbi();
  x.copyTo(r);
  this.reduce(r);
  return r;
  }
  public function reduce(x:BigInteger):void {
  while(x.t >15)*this.mpl)&this. um)= x.DV) { x[j] -= x.DV; x[++j]++; }
  }
  x.clamp();
  x.drShiftTo(this.m.t,x);
  if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
  }
  public function sqrTo(x:BigInteger,r:BigInteger):void { x.squareTo(r); this.reduce(r); }
  public function mulTo(x:BigInteger,y:BigInteger,r:BigInteger):void { x.multiplyTo(y,r); this.reduce(r); }
  } private class Arcfour() {
  private var i:Number = 0;
  private var j:Number = 0;
  private var S:Array = [];
  public function init(key:Array):void {
  var i:Number, j:Number, t:String;
  for(i = 0; i Array {
  var t:Number;
  this.i = (this.i + 1) & 255;
  this.j = (this.j + this.S[this.i]) & 255;
  t = this.S[this.i];
  this.S[this.i] = this.S[this.j];
  this.S[this.j] = t;
  return this.S[(t + this.S[this.i]) & 255];
  }
  }
  /************************************************* *************************************************** **/
  /************************************************* *************************************************** **/    
  var BI_RM:String = "0123456789abcdefghijklmnopqrstuvwxyz";
  var BI_RC:Array = [];
  var rr:String,vv:Number;
  rr = String.fromCharCode('0');/****  "0".charCodeAt(0); ****/
  for(vv = 0; vv > 6) + b64map.charAt(c & 63);
  }
  if(i+1 == h.length) {
  c = parseInt(h.substring(i,i+1),16);
  ret += b64map.charAt(c > 2) + b64map.charAt((c & 3)  0) ret += b64pad;
  return ret;
  }
  function b64tohex(s:String):String {
  var ret:String = ""
  var i:Number;
  var k:Number = 0; 
  var slop:Number;
  for(i = 0; i > 2);
  slop = v & 3;
  k = 1;
  }else if(k == 1) {
  ret += int2char((slop > 4));
  slop = v & 0xf;
  k = 2;
  }else if(k == 2) {
  ret += int2char(slop);
  ret += int2char(v >> 2);
  slop = v & 3;
  k = 3;
  } else {
  ret += int2char((slop > 4));
  ret += int2char(v & 0xf);
  k = 0;
  }
  }
  if(k == 1)
  ret += int2char(slop Array {
  var h:String = b64tohex(s);
  var i:Number;
  var a:Array =[];
  for(i = 0; 2*i Array;
  var rng_pptr:Number = 0;
  public function SecureRandom():void{
  if(rng_pool == null) {
  rng_pool = [];
  rng_pptr = 0;
  var t:Number;
  while(rng_pptr >> 8;
  rng_pool[rng_pptr++] = t & 255;
  }
  rng_pptr = 0;
  rng_seed_time();
  }
  }
  public function nextBytes(ba:Array):void {
  var i:Number;
  for(i = 0; i > & 255;
  rng_pool[rng_pptr++] ^= (x >> 16) & 255;
  rng_pool[rng_pptr++] ^= (x >> 24) & 255;
  if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
  } } public class RSAKey{
  private var n:BigInteger = null;
  private var e:BigInteger = 0;
  private var d = null;
  private var p = null;
  private var q = null;
  private var dmp1 = null;
  private var dmq1 = null;
  private var coeff = null;
  public function setPublic(N:String,E:String) {
  if(N != null && E != null && N.length > 0 && E.length > 0) {
  this.n = parseBigInt(N,16);
  this.e = parseInt(E,16);
  } else
  Alert.show("Invalid RSA public key");
  }
  public function doPublic(x:BigInteger):BigInteger {
  return x.modPowInt(this.e, this.n);
  }
  public function encrypt(text:String):String {
  var m :BigInteger = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
  if(m == null) return null;
  var c:BigInteger = this.doPublic(m);
  if(c == null) return null;
  var h:String = c.toString(16).toUpperCase();
  var gapLen:Number = 256 - h.length;
  for(var i:Number = 0; i Array = [];
  var i = s.length - 1;
  var len = s.length;
  if(len 0) {
  ba[j++] = s.charCodeAt(i++);
  }
  var rng:SecureRandom = new SecureRandom();
  var x:Array = [];
  while(j<n)  { 
  x[0] = 0;
  while(x[0] == 0) 
  rng.nextBytes(x);
  ba[j++] = x[0];
  }  
  return new BigInteger(ba);
  }
  }
  }

猜你喜欢

转载自auwg34auwg.iteye.com/blog/1573010