⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crypto.js.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
  for(var i = 0; i < t; ++i) {    a.fromInt(lowprimes[i]);    var y = a.modPow(r,this);    if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {      var j = 1;      while(j++ < k && y.compareTo(n1) != 0) {        y = y.modPowInt(2,this);        if(y.compareTo(BigInteger.ONE) == 0) return false;      }      if(y.compareTo(n1) != 0) return false;    }  }  return true;}// protectedBigInteger.prototype.chunkSize = bnpChunkSize;BigInteger.prototype.toRadix = bnpToRadix;BigInteger.prototype.fromRadix = bnpFromRadix;BigInteger.prototype.fromNumber = bnpFromNumber;BigInteger.prototype.bitwiseTo = bnpBitwiseTo;BigInteger.prototype.changeBit = bnpChangeBit;BigInteger.prototype.addTo = bnpAddTo;BigInteger.prototype.dMultiply = bnpDMultiply;BigInteger.prototype.dAddOffset = bnpDAddOffset;BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;BigInteger.prototype.modInt = bnpModInt;BigInteger.prototype.millerRabin = bnpMillerRabin;// publicBigInteger.prototype.clone = bnClone;BigInteger.prototype.intValue = bnIntValue;BigInteger.prototype.byteValue = bnByteValue;BigInteger.prototype.shortValue = bnShortValue;BigInteger.prototype.signum = bnSigNum;BigInteger.prototype.toByteArray = bnToByteArray;BigInteger.prototype.equals = bnEquals;BigInteger.prototype.min = bnMin;BigInteger.prototype.max = bnMax;BigInteger.prototype.and = bnAnd;BigInteger.prototype.or = bnOr;BigInteger.prototype.xor = bnXor;BigInteger.prototype.andNot = bnAndNot;BigInteger.prototype.not = bnNot;BigInteger.prototype.shiftLeft = bnShiftLeft;BigInteger.prototype.shiftRight = bnShiftRight;BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;BigInteger.prototype.bitCount = bnBitCount;BigInteger.prototype.testBit = bnTestBit;BigInteger.prototype.setBit = bnSetBit;BigInteger.prototype.clearBit = bnClearBit;BigInteger.prototype.flipBit = bnFlipBit;BigInteger.prototype.add = bnAdd;BigInteger.prototype.subtract = bnSubtract;BigInteger.prototype.multiply = bnMultiply;BigInteger.prototype.divide = bnDivide;BigInteger.prototype.remainder = bnRemainder;BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;BigInteger.prototype.modPow = bnModPow;BigInteger.prototype.modInverse = bnModInverse;BigInteger.prototype.pow = bnPow;BigInteger.prototype.gcd = bnGCD;BigInteger.prototype.isProbablePrime = bnIsProbablePrime;// BigInteger interfaces not implemented in jsbn:// BigInteger(int signum, byte[] magnitude)// double doubleValue()// float floatValue()// int hashCode()// long longValue()// static BigInteger valueOf(long val)// prng4.js - uses Arcfour as a PRNGfunction Arcfour() {  this.i = 0;  this.j = 0;  this.S = new Array();}// Initialize arcfour context from key, an array of ints, each from [0..255]function ARC4init(key) {  var i, j, t;  for(i = 0; i < 256; ++i)    this.S[i] = i;  j = 0;  for(i = 0; i < 256; ++i) {    j = (j + this.S[i] + key[i % key.length]) & 255;    t = this.S[i];    this.S[i] = this.S[j];    this.S[j] = t;  }  this.i = 0;  this.j = 0;}function ARC4next() {  var t;  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];}Arcfour.prototype.init = ARC4init;Arcfour.prototype.next = ARC4next;// Plug in your RNG constructor herefunction prng_newstate() {  return new Arcfour();}// Pool size must be a multiple of 4 and greater than 32.// An array of bytes the size of the pool will be passed to init()var rng_psize = 256;// Random number generator - requires a PRNG backend, e.g. prng4.js// For best results, put code like// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>// in your main HTML document.var rng_state;var rng_pool;var rng_pptr;// Mix in a 32-bit integer into the poolfunction rng_seed_int(x) {  rng_pool[rng_pptr++] ^= x & 255;  rng_pool[rng_pptr++] ^= (x >> 8) & 255;  rng_pool[rng_pptr++] ^= (x >> 16) & 255;  rng_pool[rng_pptr++] ^= (x >> 24) & 255;  if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;}// Mix in the current time (w/milliseconds) into the poolfunction rng_seed_time() {  rng_seed_int(new Date().getTime());}// Initialize the pool with junk if needed.if(rng_pool == null) {  rng_pool = new Array();  rng_pptr = 0;  var t;  while(rng_pptr < rng_psize) {  // extract some randomness from Math.random()    t = Math.floor(65536 * Math.random());    rng_pool[rng_pptr++] = t >>> 8;    rng_pool[rng_pptr++] = t & 255;  }  rng_pptr = 0;  rng_seed_time();  //rng_seed_int(window.screenX);  //rng_seed_int(window.screenY);}function rng_get_byte() {  if(rng_state == null) {    rng_seed_time();    rng_state = prng_newstate();    rng_state.init(rng_pool);    for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)      rng_pool[rng_pptr] = 0;    rng_pptr = 0;    //rng_pool = null;  }  // TODO: allow reseeding after first request  return rng_state.next();}function rng_get_bytes(ba) {  var i;  for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();}function SecureRandom() {}SecureRandom.prototype.nextBytes = rng_get_bytes;// Depends on jsbn.js and rng.js// convert a (hex) string to a bignum objectfunction parseBigInt(str,r) {  return new BigInteger(str,r);}function linebrk(s,n) {  var ret = "";  var i = 0;  while(i + n < s.length) {    ret += s.substring(i,i+n) + "\n";    i += n;  }  return ret + s.substring(i,s.length);}function byte2Hex(b) {  if(b < 0x10)    return "0" + b.toString(16);  else    return b.toString(16);}// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigintfunction pkcs1pad2(s,n) {  if(n < s.length + 11) {    alert("Message too long for RSA");    return null;  }  var ba = new Array();  var i = s.length - 1;  while(i >= 0 && n > 0) ba[--n] = s.charCodeAt(i--);  ba[--n] = 0;  var rng = new SecureRandom();  var x = new Array();  while(n > 2) { // random non-zero pad    x[0] = 0;    while(x[0] == 0) rng.nextBytes(x);    ba[--n] = x[0];  }  ba[--n] = 2;  ba[--n] = 0;  return new BigInteger(ba);}// "empty" RSA key constructorfunction RSAKey() {  this.n = null;  this.e = 0;  this.d = null;  this.p = null;  this.q = null;  this.dmp1 = null;  this.dmq1 = null;  this.coeff = null;}// Set the public key fields N and e from hex stringsfunction RSASetPublic(N,E) {  if(N != null && E != null && N.length > 0 && E.length > 0) {    this.n = parseBigInt(N,16);    this.e = parseInt(E,16);  }  else    alert("Invalid RSA public key");}// Perform raw public operation on "x": return x^e (mod n)function RSADoPublic(x) {  return x.modPowInt(this.e, this.n);}// Return the PKCS#1 RSA encryption of "text" as an even-length hex stringfunction RSAEncrypt(text) {  var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);  if(m == null) return null;  var c = this.doPublic(m);  if(c == null) return null;  var h = c.toString(16);  if((h.length & 1) == 0) return h; else return "0" + h;}// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string//function RSAEncryptB64(text) {//  var h = this.encrypt(text);//  if(h) return hex2b64(h); else return null;//}// protectedRSAKey.prototype.doPublic = RSADoPublic;// publicRSAKey.prototype.setPublic = RSASetPublic;RSAKey.prototype.encrypt = RSAEncrypt;//RSAKey.prototype.encrypt_b64 = RSAEncryptB64;// Depends on rsa.js and jsbn2.js// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintextfunction pkcs1unpad2(d,n) {  var b = d.toByteArray();  var i = 0;  while(i < b.length && b[i] == 0) ++i;  if(b.length-i != n-1 || b[i] != 2)    return null;  ++i;  while(b[i] != 0)    if(++i >= b.length) return null;  var ret = "";  while(++i < b.length)    ret += String.fromCharCode(b[i]);  return ret;}// Set the private key fields N, e, and d from hex stringsfunction RSASetPrivate(N,E,D) {  if(N != null && E != null && N.length > 0 && E.length > 0) {    this.n = parseBigInt(N,16);    this.e = parseInt(E,16);    this.d = parseBigInt(D,16);  }  else    alert("Invalid RSA private key");}// Set the private key fields N, e, d and CRT params from hex stringsfunction RSASetPrivateEx(N,E,D,P,Q,DP,DQ,C) {  if(N != null && E != null && N.length > 0 && E.length > 0) {    this.n = parseBigInt(N,16);    this.e = parseInt(E,16);    this.d = parseBigInt(D,16);    this.p = parseBigInt(P,16);    this.q = parseBigInt(Q,16);    this.dmp1 = parseBigInt(DP,16);    this.dmq1 = parseBigInt(DQ,16);    this.coeff = parseBigInt(C,16);  }  else    alert("Invalid RSA private key");}// Generate a new random private key B bits long, using public expt Efunction RSAGenerate(B,E) {  var rng = new SecureRandom();  var qs = B>>1;  this.e = parseInt(E,16);  var ee = new BigInteger(E,16);  for(;;) {    for(;;) {      this.p = new BigInteger(B-qs,1,rng);      if(this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;    }    for(;;) {      this.q = new BigInteger(qs,1,rng);      if(this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break;    }    if(this.p.compareTo(this.q) <= 0) {      var t = this.p;      this.p = this.q;      this.q = t;    }    var p1 = this.p.subtract(BigInteger.ONE);    var q1 = this.q.subtract(BigInteger.ONE);    var phi = p1.multiply(q1);    if(phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {      this.n = this.p.multiply(this.q);      this.d = ee.modInverse(phi);      this.dmp1 = this.d.mod(p1);      this.dmq1 = this.d.mod(q1);      this.coeff = this.q.modInverse(this.p);      break;    }  }}// Perform raw private operation on "x": return x^d (mod n)function RSADoPrivate(x) {  if(this.p == null || this.q == null)    return x.modPow(this.d, this.n);  // TODO: re-calculate any missing CRT params  var xp = x.mod(this.p).modPow(this.dmp1, this.p);  var xq = x.mod(this.q).modPow(this.dmq1, this.q);  while(xp.compareTo(xq) < 0)    xp = xp.add(this.p);  return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);}// Return the PKCS#1 RSA decryption of "ctext".// "ctext" is an even-length hex string and the output is a plain string.function RSADecrypt(ctext) {  var c = parseBigInt(ctext, 16);  var m = this.doPrivate(c);  if(m == null) return null;  return pkcs1unpad2(m, (this.n.bitLength()+7)>>3);}// Return the PKCS#1 RSA decryption of "ctext".// "ctext" is a Base64-encoded string and the output is a plain string.//function RSAB64Decrypt(ctext) {//  var h = b64tohex(ctext);//  if(h) return this.decrypt(h); else return null;//}// protectedRSAKey.prototype.doPrivate = RSADoPrivate;// publicRSAKey.prototype.setPrivate = RSASetPrivate;RSAKey.prototype.setPrivateEx = RSASetPrivateEx;RSAKey.prototype.generate = RSAGenerate;RSAKey.prototype.decrypt = RSADecrypt;//RSAKey.prototype.b64_decrypt = RSAB64Decrypt;nValue="a5261939975948bb7a58dffe5ff54e65f0498f9175f5a09288810b8975871e99af3b5dd94057b0fc07535f5f97444504fa35169d461d0d30cf0192e307727c065168c788771c561a9400fb49175e9e6aa4e23fe11af69e9412dd23b0cb6684c4c2429bce139e848ab26d0829073351f4acd36074eafd036a5eb83359d2a698d3";eValue="10001";dValue="8e9912f6d3645894e8d38cb58c0db81ff516cf4c7e5a14c7f1eddb1459d2cded4d8d293fc97aee6aefb861859c8b6a3d1dfe710463e1f9ddc72048c09751971c4a580aa51eb523357a3cc48d31cfad1d4a165066ed92d4748fb6571211da5cb14bc11b6e2df7c1a559e6d5ac1cd5c94703a22891464fba23d0d965086277a161";pValue="d090ce58a92c75233a6486cb0a9209bf3583b64f540c76f5294bb97d285eed33aec220bde14b2417951178ac152ceab6da7090905b478195498b352048f15e7d";qValue="cab575dc652bb66df15a0359609d51d1db184750c00c6698b90ef3465c99655103edbf0d54c56aec0ce3c4d22592338092a126a0cc49f65a4a30d222b411e58f";dmp1Value="1a24bca8e273df2f0e47c199bbf678604e7df7215480c77c8db39f49b000ce2cf7500038acfff5433b7d582a01f1826e6f4d42e1c57f5e1fef7b12aabc59fd25";dmq1Value="3d06982efbbe47339e1f6d36b1216b8a741d410b0c662f54f7118b27b9a4ec9d914337eb39841d8666f3034408cf94f5b62f11c402fc994fe15a05493150d9fd";coeffValue="3a3e731acd8960b7ff9eb81a7ff93bd1cfa74cbd56987db58b4594fb09c09084db1734c8143f98b602b981aaa9243ca28deb69b5b280ee8dcee0fd2625e53250";setupEngine(am3, 28);var RSA = new RSAKey();var TEXT = "The quick brown fox jumped over the extremely lazy frogs!";RSA.setPublic(nValue, eValue);RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);function encrypt() {  return RSA.encrypt(TEXT);}function decrypt() {  return RSA.decrypt(TEXT);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -